我正在寻找一个代码示例,该示例说明了在ATL COM服务器DLL中进行跨线程COM调用。知道一个吗?

更多详细信息:

我的组件是IE浏览器帮助器对象,需要在后台线程上工作。在从IE主线程调用的对象的一种方法中,IE给了我一个指向IE DOM的指针( IHtmlWindow2 ),然后将其存储在本地成员变量中。

现在,我想创建一个工作线程,该线程可以异步调用刚刚存储的COM接口指针上的方法。

如果有关系,我的调用将在我从IE获得接口指针的方法返回后发生,因此当我尝试从工作线程进行调用时,IE(而非我的代码)将具有控制权。

我的组件和宿主应用程序都是Apartment线程。

任何人都知道一个很好的C ++示例,展示了如何完成此操作吗?

我正在寻找一个简短而直接的示例(并且不是只是指向相关文档的指针),因为我阅读了此问题及其答案,对我必须做的学习量感到害怕从头开始编写实现。每当有人建议在编写代码之前阅读一本Don Box书籍时,您就会知道自己住了一个漫长而混乱的夜晚...:-)

有帮助吗?

解决方案

这在COM中是自动的,它将满足公寓的要求,并且如果接口指针具有STA亲和力,则将封送该调用。您必须先整理接口指针,然后才能在线程中使用它,ATL具有AtlMarshalPtrInProc()和AtlUnmarshalPtr()辅助方法,以使其变得更容易。如果您想自己做CoMarshalInterThreadInterfaceInStream()或IGlobalInterfaceTable。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top