| Предыдущий | Следующий |
| TYPE_E_QUALIFIEDNAMEDISALLOWED | TYPE_E_WRONGTYPEKIND |
TYPE_E_INVALIDSTATE
Где возник отказ
При результате TYPE_E_INVALIDSTATE (0X80028029) локализуйте операцию внутри COM Automation type library and ITypeInfo metadata resolution. Практическая граница — некорректное состояние; поздняя обёртка может скрыть исходный command, policy или lifecycle-state.
COM type libraries образуют versioned metadata graph из LIBID, TYPEKIND, GUID, HREFTYPE и imported references; registry registration — только одна из возможных стадий отказа.
Конкретные признаки из исходного EN-описания
the result is HRESULT 2147647529 ( 0x80028029 ) from winerror.h.
TYPE_E_BADMODULEKIND concerns a module category mismatch; it concerns the lifecycle phase of the metadata object.
capture builder phase; prior SetTypeFlags or LayOut calls; forward declarations; referenced types; save state; operation sequence.
A generator calls LayOut before defining all referenced records; reordering construction produces valid metadata.
Диагностический снимок
- LIBID/version/LCID/SYSKIND и TYPEKIND.
- GUID/MEMBERID/HREFTYPE либо FUNCDESC/TYPEDESC, проверяемые операцией.
- точный LoadTypeLib/ITypeInfo/registration boundary и первый HRESULT.
Type compiler, importer, proxy generator и runtime ITypeInfo consumer могут возвращать тот же TYPE_E_* на разных boundaries, поэтому producer/toolchain version входит в evidence.
Как отделить соседний код
Проверьте condition «некорректное состояние» на том же API и object generation. Изменение одного prerequisite должно убрать этот HRESULT или сдвинуть первый отказ к другой конкретной границе.
Проверьте metadata graph для условия «некорректное состояние»: registration, module kind, member lookup, TYPEKIND и imported library version дают разные TYPE_E_* даже в одном toolchain.
Критерий восстановления
Исправьте metadata/type-library condition «некорректное состояние», пересоберите или зарегистрируйте согласованный versioned artifact и повторите минимальный LoadTypeLib/ITypeInfo scenario.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
