如何使用运行对象表 (ROT) 在两个 COM 对象之间进行通信?
我有两个用 C++ 和 ATL 编写的 COM 对象。这些都在一个图书馆中,我知道它们的 IID 和 CLID。
我找不到在两个简单的 COM 对象之间进行这种简单通信的示例。如何创建IMoniker以及如何将其添加到ROT?那么,如何在不同进程/线程的其他COM中检索该对象的指针呢?
有人可以提供一个小例子吗?
编辑:更多信息:
我正在为 IE 编写一个插件。有两个完全不相关的 COM 对象,IE 出于不同的目的而加载。一个是BHO(浏览器帮助对象),另一个是异步可插拔协议(APP)我发现我可以通过ROT进行通信 此处。
I have two COM objects written in C++ and ATL. There are in one library and I know their IIDs and CLIDs.
I can't find an example of doing this simple communication between two simple COM objects. How to create IMoniker and how to add it to ROT? And then, how to retrieve pointer of this object,in other COM in different process/thread?
Does anyone can provide a small example?
EDIT: More info:
I'm writing an add-on for IE. There are two COM object completely unrelated that IE load for different purpose. One is BHO (Browser Helper Obect), other is Asynchronous Pluggable Protocol (APP) I found I can communicate through ROT here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用 CreateItemMoniker 而不是 CreatePointerMoniker - 它允许您在 ROT 中为对象指定名称。
你应该能够像这样注册你的对象:
如果你不希望你的对象在没有更多引用时被自动杀死,你可以指定 ROTFLAGS_REGISTRATIONKEEPSALIVE 而不是 0 (在 MSDN 中签入)。
该函数返回 cookie,您可以使用它来显式地从 ROT 中删除对象,如下所示:
您可以像这样从 ROT 获取对象(当然您应该使用与注册对象相同的名称=)
Try using CreateItemMoniker instead of CreatePointerMoniker - it allows you to specify a name for your object in ROT.
You should be able to register your object like this:
If you don't want your object to be auto-killed when there are no more references to it, you could specify ROTFLAGS_REGISTRATIONKEEPSALIVE instead of 0 (check in in MSDN).
The function returns cookie you can use to explicitly remove your object from ROT later like this:
You can get the object from ROT like this (you should use the same name you used to register the object of course =)