2

我正在寻找一个代码示例,它说明在 ATL COM 服务器 DLL 中进行跨线程 COM 调用。认识一个?

更多细节:

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

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

如果重要的话,我的调用将在我从 IE 获取接口指针的方法返回后发生,因此当我尝试从我的工作线程进行调用时,IE(而不是我的代码)将拥有控制权。

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

任何人都知道一个很好的 C++ 示例来展示这是如何完成的?

我特别在寻找一个简短、直接的示例(而不仅仅是指向相关文档的指针),因为我阅读了这个问题及其答案,并且对从头开始编写实现所需的学习量感到害怕。任何时候有人建议在编写代码之前阅读 Don Box 的书,你就知道你要度过一个漫长而混乱的夜晚...... :-)

4

1 回答 1

2

这在 COM 中是自动的,它会处理单元要求,并且如果接口指针具有 STA 亲和性,它将编组调用。您必须在线程中使用接口指针之前对其进行编组,ATL 具有 AtlMarshalPtrInProc() 和 AtlUnmarshalPtr() 辅助方法来简化此操作。CoMarshalInterThreadInterfaceInStream() 或 IGlobalInterfaceTable 如果你想自己做。

于 2011-03-23T22:26:52.053 回答