【问题标题】:callback/event management with COM/Ole/ActiveX使用 COM/Ole/ActiveX 进行回调/事件管理
【发布时间】:2010-12-17 04:11:33
【问题描述】:

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

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

【问题讨论】:

    标签: windows com activex


    【解决方案1】:

    如果您要询问有关 COM 事件如何工作的更一般的问题(来自任何客户端,而不仅仅是对安全性等有一些特定要求的 IE)以及如何公开对象的事件,那么有一个很好的 CodeProject文章,Understanding COM Event Handling,其中有很多关于 COM 事件处理如何工作的细节。加上一个 C++ 示例(不依赖于 ATL 或 MFC)来说明如何托管事件。警告:这是一篇相当复杂的文章,但如果你能读懂并理解它,你就会对 COM 事件的工作原理有一个很好的背景。

    如果您特别询问如何将您的 COM 对象公开到 javascript 中以便可以从 Internet Explorer 调用,那么 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 文章了解一些一般背景信息。

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

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2011-02-14
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多