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