Что означает код HRESULT 0x80020008 (DISP_E_BADVARTYPE)?

 
Предыдущий Следующий
DISP_E_NONAMEDARGS DISP_E_EXCEPTION

DISP_E_BADVARTYPE

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

DISP_E_BADVARTYPE (0x80020008) — один из VARIANT содержит недопустимый, зарезервированный или внутренне несогласованный VARTYPE.

COM Automation позволяет вызывать свойства и методы через IDispatch без жёсткой привязки к vtable-интерфейсу: имя преобразуется в DISPID, а Invoke получает аргументы как VARIANT/DISPPARAMS. Поэтому для DISP_E_* особенно важны конкретный член, DISPID и фактические типы аргументов.

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

  • Запишите vt каждого аргумента до marshaling/coercion.
  • Проверьте корректность комбинаций флагов VT_BYREF, VT_ARRAY и базового типа, а также инициализацию VARIANT.
  • Исключите use-after-free/перезапись памяти, если значение vt меняется между заполнением и Invoke.

Что делать

Инициализируйте VARIANT штатными API и передавайте поддерживаемый Automation-тип; не исправляйте только числовое поле vt без корректного соответствующего payload.

Технические ссылки


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