使用COM / Ole / ActiveX进行callback/事件pipe理

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

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

如何使用WMI枚举所有ActiveX元素?

需要ActiveX控件将Excelembedded到对话框中

标准的ActiveXObject引用列表

手动安装ActiveX组件

应用程序间的通信

如果你问一些关于COM事件如何工作的更一般的问题(来自任何客户端,不仅仅是对安全有特殊要求的IE),以及如何暴露你的对象的事件,那么CodeProject的一篇很好的文章, 理解COM事件处理 ,它有很多关于COM事件处理如何工作的细节。 再加上一个C ++示例(不依赖于ATL或MFC)来说明如何托管事件。 警告:这是一篇非常复杂的文章,但是如果您能够理解并理解这些文章,您将对COM事件的工作方式有很好的背景。

如果你特别要求如何将你的COM对象暴露给JavaScript,以便它们可以从Internet Explorer中调用,那么如何创建一个将事件触发到javascript(不使用ATL)的ActiveX控件是一个很好的博客文章,需要(如标题所示)将您的COM对象暴露给javascript,包括所有特定于IE的goo。

顺便说一句,除非你有一个好的理由不建议,我会建议使用ATL来处理你的COM支持,暴露你的事件等等。你可以在普通的,不依赖的C ++中做到这一点(正如上面的文章所做的那样),但ATL使事情更容易。 一个合理的出发点是MSDN的ATL事件部分,但是在深入MSDN的东西之前,我肯定会先阅读一下CodeProject的一些常规背景信息。

回答有关Idispatch和事件的具体问题:事件不必使用Idispatch,客户端可以直接与您的C ++事件处理程序实现进行交谈。 但是大多数情况下,如果您希望您的事件通过IE,javascript,VB6和其他自动化应用程序(“ automation ”是COM客户端只使用Idispatch来调用COM对象的属性方法和事件的COM术语) 。 由于这个原因,大多数事件发送应用程序使用所谓的“双接口”(在它们的C ++实现中)从Idispatch和您的自定义事件接口继承,并最终调用相同的代码。 ATL使构建这种双接口COM组件非常容易。

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...