gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:01:59 26 4
gpt4 key购买 nike

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

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

最佳答案

如果您要询问有关 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 上的属性、方法和事件的客户端对象)。由于这个原因,大多数事件发送应用程序都使用所谓的“双重接口(interface)”,它们(在它们的 C++ 实现中)继承自 IDispatch 和您的自定义事件接口(interface),并最终在幕后调用相同的代码。 ATL 使得构建这样的双界面 COM 组件变得非常容易。

关于windows - 使用 COM/Ole/ActiveX 进行回调/事件管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com