代码之家  ›  专栏  ›  技术社区  ›  Franck Freiburger

使用COM/Ole/ActiveX进行回调/事件管理

  •  2
  • Franck Freiburger  · 技术社区  · 16 年前

    我正在为脚本语言编写本机COM/Ole/ActiveX包装器。 我需要一些建议来实现事件/回调(比如来自Microsoft.XMLHTTP对象的onreadystatechange)

    我注意到一些COM对象可以通过IDispatch接口调用我的自定义对象。这是管理事件的唯一方法吗?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Justin Grant    16 年前

    如果您想问一个更一般的问题,关于COM事件如何工作(来自任何客户机,而不仅仅是对安全性有特定要求的IE),以及如何公开对象的事件,那么有一篇很好的CodeProject文章, Understanding COM Event Handling ,其中有许多关于COM事件处理工作原理的详细信息。加上C++样本(不依赖于ATL或MFC)来说明如何宿主事件。警告:这是一篇相当复杂的文章,但如果您能看完并理解它,您将对COM事件的工作方式有很好的了解。

    how to create an activex control that fires events to javascript (without using ATL) 这是一篇很好的博客文章,讨论了将COM对象暴露于javascript(包括所有IE特定的goo)所需的内容(如标题所示)。

    顺便说一下,除非你有一个很好的理由不这样做,我建议使用ATL来处理你的COM支持,暴露你的事件等等。你可以在普通的情况下做它,没有依赖C++(正如上面的文章所做的),但是ATL使事情变得更容易。一个合理的起点是MSDN ATL Events 部分,但在深入研究MSDN之前,我肯定会先阅读CodeProject文章,了解一些一般的背景信息。

    automation 是COM术语,用于仅使用IDispatch调用COM对象上的属性、方法和事件的客户端)。为此,大多数事件发送应用程序使用所谓的“双接口”(在它们的C++实现中)从IDispatch和自定义事件接口继承,并最终在封面下调用相同的代码。ATL使构建这样一个双接口COM组件变得非常容易。