Что означает код HRESULT 0x800401F1 (CO_E_ALREADYINITIALIZED)?

 
Предыдущий Следующий
CO_E_NOTINITIALIZED CO_E_CANTDETERMINECLASS

CO_E_ALREADYINITIALIZED

Контракт операции

При CO_E_ALREADYINITIALIZED нарушено конкретное условие: Функция CoInitialize уже была вызвана. Не подменяйте его последующей ошибкой приложения: сначала локализуйте инициализация COM runtime.

Параметры первого сбоя

  • зафиксируйте thread ID, apartment model, CoInitializeEx history, TLS/allocator/SCM state и первый initialization HRESULT. Для условия «Функция CoInitialize уже была вызвана» это позволяет восстановить исходный объект и не спутать его с последующим состоянием.
  • соберите для сравнения технические маркеры FACILITY_ITF, CLSID, IID, CoGetClassObject, CoInitializeEx с теми значениями, которые были видны до очистки/rollback; они привязывают «Функция CoInitialize уже была вызвана» к реальному вызову.
  • снимите в трассировку момент первого результата и один исправный запуск, сохранив одинаковыми входные данные; различие должно появиться именно на стадии инициализация COM runtime.

Отделение соседних состояний

проверьте отдельно проверить порядок инициализации на одном потоке и отделить apartment setup от последующей активации. Изменяйте только предпосылку, связанную с «Функция CoInitialize уже была вызвана», а регистрацию, identity, входной объект и окружение по возможности оставляйте прежними.

не компенсировать ошибку дополнительными CoInitialize/CoUninitialize без проверки баланса вызовов; для результата «Функция CoInitialize уже была вызвана» широкая переустановка, очистка каталога или ослабление безопасности не считается доказательством причины.

Для соседних результатов CO_E_NOTINITIALIZED сравнивайте первую различающуюся операцию. Исправление подтверждено только тогда, когда исходная граница проходит при прежних входах и следующий ожидаемый шаг получает корректное состояние.

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


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