Что означает код HRESULT 0x8002000D (DISP_E_ARRAYISLOCKED)?

 
Предыдущий Следующий
DISP_E_UNKNOWNLCID DISP_E_BADPARAMCOUNT

DISP_E_ARRAYISLOCKED

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

DISP_E_ARRAYISLOCKED (0x8002000D) — операция с SAFEARRAY требует незаблокированный массив, но у массива остаётся активная блокировка.

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

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

  • Проверьте баланс SafeArrayLock/SafeArrayUnlock и вызовы SafeArrayAccessData/SafeArrayUnaccessData.
  • Установите, какой код удерживал массив в момент redimension/destroy/transfer.
  • Исключите ранний выход по ошибке, после которого счётчик блокировок не уменьшается.

Что делать

Освободите принадлежащую вызывающему коду блокировку по тому же пути владения. Принудительное уничтожение всё ещё заблокированного SAFEARRAY скрывает жизненный цикл-ошибку.

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


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