Что означает код HRESULT 0x80030009 (STG_E_INVALIDPOINTER)?

 
Предыдущий Следующий
STG_E_INSUFFICIENTMEMORY STG_E_NOMOREFILES

STG_E_INVALIDPOINTER

HRESULT, ориентированный на разработчика

STG_E_INVALIDPOINTER обычно указывает на нарушение контракта API вызывающим кодом. Интерфейсы Structured Storage принимают указатели на имена, выходные интерфейсы, статистику и буферы. Нулевой указатель там, где методу требуется доступная для записи память, указатель с истёкшим временем жизни, недопустимая строка или неверное объявление межъязыкового взаимодействия могут вызвать эту ошибку до фактического обращения к составному файлу.

Поэтому она отличается от STG_E_INVALIDHEADER или STG_E_DOCFILECORRUPT: те описывают контейнер документа, а STG_E_INVALIDPOINTER — границу вызова. Если тот же файл работает в другом инструменте, сначала исследуйте интеграционный код.

Что проверить

  • Проверьте точную сигнатуру метода и то, какие параметры обязательны, необязательны, предназначены только для ввода или только для вывода.
  • Для взаимодействия C#/C++ проверьте маршалинг, упаковку структур, кодировку символов и правила владения для каждого параметра размером с указатель.
  • Инициализируйте выходные указатели интерфейсов известным значением и освобождайте интерфейсы по правилам подсчёта ссылок COM.
  • Зафиксируйте имя сбойного метода; одного HRESULT без вызова API редко достаточно для поиска дефекта.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.