- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为脚本语言编写 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/
我正在尝试使用 SAP ABAP OLE OBJECT 打开受密码保护的 excel 文件,如下所示: DATA: lt_excel_line(4096) OCCURS 10 WITH HEADER
我目前正在实现一个 IOleObject 接口(interface),以将我们软件的可视化数据嵌入到其他软件(如 PowerPoint)中。我们的软件创建测量数据的图形评估(图表等)。 目标是,最终用
我对此很陌生。我正在尝试将 355 行传输到目的地 我有 3 列要转移 Customer_Number、Crime_Type、Action_Date。 当我创建源表时都是nvarchar(50) 目标
我有一个包含 2 个组件的数据流任务: 属于 SELECT 查询的 OLEDB 数据源任务: SELECT ACCOUNTID FROM JOBS WHERE STATUS=3 OLE DB 命令任务
我有一个包含 2 个组件的数据流任务: 属于 SELECT 查询的 OLEDB 数据源任务: SELECT ACCOUNTID FROM JOBS WHERE STATUS=3 OLE DB 命令任务
我有一个自定义数据库,我想为其编写一个 OLE DB 提供程序,但我希望用 C# 来完成。 我找到了这两个站点,但所有示例都在 C 中。 http://msdn.microsoft.com/en-us
我正在运行以下代码 /*Fetchinch Last CustID from custMaster*/ int ID = 0; try { con.Open(); da = new
我使用 oledb 提供程序(SQLOLEDB 和 SQL Native OLEDB 提供程序)创建了一个示例应用程序。 案例 1:提供者 = SQLOLEDB hr = ::CoInitialize
我花了几个小时试图解决这个问题。对于给我带来问题的列,我在 sql server 中使用标量函数来获取名称。该功能是正确的并且工作正常。然后我使用一个存储过程与 ssis 一起使用。给我错误的列指出它
我的源是 TXT 平面文件源,目标是 OLE DB 类型。 (见图) 我发现了一个非常basic tutorial on Code Project创建一个包。我完成了这些步骤,但是在调试时出现了一个奇
我正在对SQL Server数据库使用OLE DB批量复制操作,但是在将数据加载到bit列时遇到了麻烦-它们总是填充有true! 我根据下面的代码段从simple reproduction progr
我目前生活在 90 年代,我收到了这段遗留代码。我对 COM/OLE/MFC/ATL 不了解,所以我问这个问题,希望当时有经验的人可以帮助我找出这个问题。 我拥有的是这个非常古老/遗留的 MFC/AT
我使用 WTL 创建了一个 Dialog,继承自 CDialogImpl 类,在主对话框中我创建了另一个对话框,并在第二个子对话框中创建了一个列表控件。我想向列表控件添加拖放功能,我在网上阅读了有关
我使用 WinAPI 函数在 C# 中创建 OLE 文件。 WinAPI 函数是: [DllImport("ole32.dll")] public static extern int O
我正在尝试调整图像大小以在我的 OLED 设备上显示。 我想要显示的图像是: 目前,我的 OLED 显示屏仅显示图像的一小部分: 基于How to resize image? ,我在脚本中添加了 ne
如何在 128x64 OLED 显示屏上滚动长文本 我正在使用 Adafruit_SSD1306 驱动程序 此代码仅显示“This”,因为文本太大而无法显示,但是当我滚动文本时,仅“This”滚动而不
我无法解决这些术语之间的差异。 是COM和ActiveX同义词吗? ActiveX对象仅仅是公开IDispatch的COM对象吗? 许多较旧的MSDN页面提到IDispatch时没有任何COM上下文。
我们在 Delphi 7 中使用一些 OLE 自动化来打开一个 word 文档,然后在加载后保存它,并将其加载到数据库中。 这工作正常,但部分要求是在 OLE 位发生时有一个进度条,如果 OLE 部分
在我当前使用的产品中,Excel 电子表格是使用 Delphi 的 OLE 生成的。电子表格包含许多日期,应用程序从系统设置加载短日期格式并将其应用到单元格。除非系统格式至少设置为俄语、巴什基尔语、鞑
这个 c++ question 的语法是什么?在德尔福? 使用 oleContainer 后,并尝试执行 SaveDocumentAs 但不起作用。我认为这可能是一个不错的选择。 更新:感谢您的翻译,
我是一名优秀的程序员,十分优秀!