| Предыдущий | Следующий |
| 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 редко достаточно для поиска дефекта.
Ссылки
- Microsoft: контракт параметров IStorage::OpenStorage
- Microsoft: контракт параметров IStorage::OpenStream
- OpenMcdf: межъязыковой API составных файлов
Нужно найти другой код? Найти другой код состояния или ошибки.