Что означает код HRESULT 0x80020010 (DISP_E_BADCALLEE)?

 
Предыдущий Следующий
DISP_E_PARAMNOTOPTIONAL DISP_E_NOTACOLLECTION

DISP_E_BADCALLEE

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

DISP_E_BADCALLEE (0x80020010) — объект, получивший Automation-вызов, нарушил ожидаемый контракт вызова или вернул некорректные данные.

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

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

  • Сохраните DISPID, flags Invoke, DISPPARAMS, EXCEPINFO и argErr на первом возврате.
  • Определите конкретный COM-server/объект, который вернул HRESULT; ошибка относится к callee, а не автоматически к вызывающему приложению.
  • Сравните версию type library и реализацию Automation-объекта с исправной системой.

Что делать

Исправлять нужно реализацию вызываемого объекта или несовместимость его контракта. Простая перестановка аргументов у caller-а без доказательства причины может только изменить симптом.

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


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