我有一个带有 ATL 简单对象的进程外 COM 服务器,它创建另一个线程。新线程将需要调用 ATL Simple 对象。由于 ATL 简单对象和新线程创建的单元不同,因此需要在新线程中编组 ATL 简单对象,否则会产生错误 0x8001010e。
我如何在服务器端编组 COM 对象或者我错过了什么?
非常感谢。
我有一个带有 ATL 简单对象的进程外 COM 服务器,它创建另一个线程。新线程将需要调用 ATL Simple 对象。由于 ATL 简单对象和新线程创建的单元不同,因此需要在新线程中编组 ATL 简单对象,否则会产生错误 0x8001010e。
我如何在服务器端编组 COM 对象或者我错过了什么?
非常感谢。
如果您熟悉 ATL - 我建议您使用CComGITPtr。它是一个智能指针,可以在全局接口表中发布您的接口,您以后可以从其他公寓访问它们。但是 GIT 就一个过程而言是全球性的。
还有一点——你是否为你的 ATL 简单对象实现了代理存根?如果您不构建代理存根,那么您的 ATL 简单对象应该公开并实现 IDispatch。在它的帮助下,代理将自动创建。
如果这个答案离你很远,我很抱歉,但我不清楚你想要完成的具体细节。
我认为这是一个设计问题,而不是实现问题。为什么不在新线程中/由新线程创建简单对象?
如果您希望跨线程边界进行通信,我建议使用一种广泛接受的模式(邮箱、事件)来向新线程的调度程序发出信号,以便在下次可用时执行操作。
您能否详细说明问题的具体情况?我很乐意提供帮助,因为这似乎就在我的小巷里......
看看CoMarshalInterThreadInterfaceInStream。如果你谷歌这个,你会找到一些如何使用它的例子。
希望有帮助。