| Предыдущий | Следующий |
| RPC_E_CANTCALLOUT_ININPUTSYNCCALL | RPC_E_THREAD_NOT_INIT |
RPC_E_WRONG_THREAD
Интерпретация результата
RPC_E_WRONG_THREAD (0X8001010E) означает: интерфейс используется из потока или apartment, отличного от того, для которого он был маршалирован. Для диагностики важен первый возврат кода в конкретной transaction или object generation, а не наиболее заметная ошибка в UI.
Английский маркер для сопоставления с исходной документацией: The application called an interface that was marshalled for a different thread.
. Используйте его как поисковый ключ вместе с timestamp и transaction/session ID.
Что сохранить
- interface IID/method, proxy или interface identity и object generation.
- origin/current thread, COM apartment и путь marshaling/unmarshaling.
- размер/hash OBJREF или proxy/stub version и первый HRESULT до wrapper.
Код-специфическая проверка
Сравните apartment, где получен interface pointer, с apartment текущего потока; прямой перенос pointer между STA/MTA не заменяет marshaling.
Проверка должна подтвердить именно условие «интерфейс используется из потока или apartment, отличного от того, для которого он был маршалирован» в текущем RTC object generation. Не используйте успешный retry после широкого reset как доказательство причины.
Восстановление
Измените только состояние или вход, непосредственно связанный с этой границей, и сравните первый HRESULT до и после исправления.
После изменения повторите тот же вызов и сравните первый HRESULT, достигнутую фазу и побочные эффекты. Исправление подтверждено только если прежнее условие «интерфейс используется из потока или apartment, отличного от того, для которого он был маршалирован» больше не возникает на сопоставимом входе.
Технические ссылки
- Microsoft: COM RPC error codes.
- Microsoft: IMessageFilter.
- Microsoft: RetryRejectedCall.
- Microsoft: CoInitialize.
Нужно найти другой код? Найти другой код состояния или ошибки.