微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用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组件非常容易。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐