Что означает код HRESULT 0x80040155 (REGDB_E_IIDNOTREG)?

 
Предыдущий Следующий
REGDB_E_CLASSNOTREG REGDB_E_BADTHREADINGMODEL

REGDB_E_IIDNOTREG

Что именно отказало

Практический смысл REGDB_E_IIDNOTREG (0X80040155): интерфейс с указанным IID не зарегистрирован. В трассировке отделяйте маркер «iidnotreg» от последующих wrapper/UI ошибок: они могут появиться уже после первичной границы и не объясняют исходное состояние.

Данные до повторной попытки

До повторной попытки запишите CLSID/IID, registry view, activation context и конкретный COM registration key. Для условия «интерфейс с указанным IID не зарегистрирован» эти данные важнее общего текста сообщения, потому что позволяют связать результат с конкретным владельцем операции.

  • CLSID/IID и точный COM activation/interface request.
  • HKCR/HKLM/HKCU путь, 32/64-bit registry view и package context.
  • InprocServer32/LocalServer32, ThreadingModel и права на ключ.
НаблюдениеЧто оно означает
Первый вызов возвращает REGDB_E_IIDNOTREGГраница «интерфейс с указанным IID не зарегистрирован» относится к текущему объекту и generation; сохраните это состояние до cleanup.
После одного целевого изменения код исчезаетСвязь с условием «интерфейс с указанным IID не зарегистрирован» подтверждается только если остальные входы и owning context не изменились.
Первым становится другой HRESULTСчитайте его новой первичной границей; маркер «iidnotreg» больше не должен подменять причину следующего отказа.

Специфическая проверка для этого кода

Запишите IID, интерфейс, proxy/stub requirement и registry view. Проверьте Interface\{IID}, ProxyStubClsid32/TypeLib и bitness. Класс может быть успешно активирован, но QueryInterface/marshaling всё равно требует зарегистрированный интерфейс; это отличает код от CLASSNOTREG.

Изолированный тест

Контрольный запуск должен воспроизводить «интерфейс с указанным IID не зарегистрирован» на тех же исходных данных. Затем восстановите или зарегистрируйте только отсутствующий объект/ключ и повторите исходный lookup или activation. Если операция проходит прежнюю стадию, гипотеза локализована; если нет — вернитесь к первому HRESULT и сохранённым полям.

  1. Зафиксируйте первый REGDB_E_IIDNOTREG и объект, которому принадлежит маркер «iidnotreg».
  2. Сохраните входные данные и lifecycle-state до изменения условия «интерфейс с указанным IID не зарегистрирован».
  3. Измените только состояние, связанное с «интерфейс с указанным IID не зарегистрирован», и выполните тот же вызов ещё раз.

Что не стоит смешивать

Не выполняйте массовую перерегистрацию COM: она меняет сразу несколько CLSID/IID и registry views. Исправление считается реальным, когда прежняя граница «интерфейс с указанным IID не зарегистрирован» пройдена на сопоставимом входе, а не просто скрыта более общим сообщением.

Документация


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