从新线程调用时发生COM 0x8001010E错误

COM 0x8001010E error when invoking from a new thread

本文关键字:COM 0x8001010E 错误 调用 新线程 线程      更新时间:2023-10-16

我有一个c++DLL,它使用IDispatch接口调用第三方DLL上的方法。如果我从原始线程调用这些方法,但如果在抛出0x800101E错误后启动一个新线程(而不是调用CoCreateInstance的线程)来调用该方法,那么它就会工作。我还在第二个线程上尝试了CoInitialize,但没有成功。

错误0x8001010E为RPC_E_WRONG_THREAD"应用程序调用了一个为不同线程整理的接口。".

您违反了COM单元规则,并且试图在不属于该指针有效单元的线程上使用接口指针。若要将接口指针传递到另一个单元,请使用封送处理。

请参阅什么是COM封送处理以及如何使用它?和CoMarshalInterThreadInterfaceInStream函数,以及这一理解COM单线程单元。