| Предыдущий | Следующий |
| 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.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.