Что означает код HRESULT 0x80020005 (DISP_E_TYPEMISMATCH)?

 
Предыдущий Следующий
DISP_E_PARAMNOTFOUND DISP_E_UNKNOWNNAME

DISP_E_TYPEMISMATCH

Что означает DISP_E_TYPEMISMATCH

DISP_E_TYPEMISMATCH (0x80020005) — Несоответствие типов.

Контекст результата 0x80020005 — подсистема «COM Automation» и область «IDispatch, сопоставление имён, аргументы VARIANT и локаль». Условие «несоответствие типов» указывает на тему «typemismatch», а не на общий отказ всего компонента.

Что проверить и как подтвердить исправление

Сначала проверьте допустимость и структуру входных данных первого неуспешного вызова. Для 0x80020005 в условии «несоответствие типов» сверьте тип, размер, диапазон, маску флагов и принадлежность каждого дескриптора текущему объекту именно по контракту первого неуспешного метода.

Чтобы локализовать 0x80020005, соберите DISPID, имя члена, LCID, число и типы аргументов, DISPPARAMS, EXCEPINFO и argErr; отдельно запишите HRESULT, IDispatch::Invoke, VARIANT, LCID, EXCEPINFO. Затем для 0x80020005 сравните исправный и неуспешный запуск в части «typemismatch», меняя одно условие за раз.

Для 0x80020005 применяйте исправление на границе первого отказа: приведите число, порядок и типы аргументов к описанию вызываемого члена; сохраните EXCEPINFO до следующего COM-вызова. Сообщение «несоответствие типов» при 0x80020005 не следует подавлять общей обработкой исключения.

Считайте исправление подтверждённым только после устойчивого повтора исходного сценария без результата 0x80020005 и без обхода штатных проверок.

Документация для результата 0x80020005: IDispatch::Invoke · IDispatch::GetIDsOfNames · EXCEPINFO.


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