在VC++程序中接收COM事件

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

VC++程序中接收COM事件

关键字:连接点 COM 事件 IDispEventImpl

 

接收事件是COM客户端中非常重要的功能。但是除了在MFC中能够接收控件[1]所发出的事件以外,VC++不能自动生成接收事件的代码。为了接收普通COM的事件,必须自行编写接收事件的代码。本文通过一个具体的实例说明如何在VC++程序中通过ATL编写接收COM事件的代码,当然,程序本身不必是ATL项目。

1      COM事件原理

COM对象通过连接点实现发送事件的功能。每个连接点都规定了接收事件用的接口,而客户程序通过实现了这个接口的对象接收事件。

如下图所示,假设COM对象A的连接点要求事件接收对象实现IEventSink接口,整个事件接收过程是这样的:首先,客户程序创建COM对象A和用于接收COM对象A事件的事件接收对象B。接下来,客户程序在COM对象A中注册COM对象B的事件接收接口IEventSink。然后,COM对象A就可以通过这个接口发送事件给客户端了。

目前,大多数的连接点都要求通过IDispatch接口发送事件, ATL自动生成的连接点和通过MFCVB制作的控件都是通过IDispatch接口传递事件。虽然通过IDispatch发送事件可以产生一致的事件接收接口,但由于IDispatch接口的困难,也造成了接收事件代码实现起来更加复杂。

本文中的例子通过ATLIDispEventImpl模板简化了事件接收对象的编码。同时,本文中的例子也说明了如何在非ATL项目中使用ATL的功能。

2      使用ATL实现连接点

OLE技术专题——第四讲:COM的连接点事件(上) 作者:杨老师一、前言  我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者;  我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者;  我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者;  ... ... ... ...  本回书开始话说 COM事件、通知、连接点......这些内容比较多,我分两次(共四回) 阅读详情

相关推荐

初识统一事件模型之COM连接点

学习C#的时候,最喜欢的就是event关键字,因为事件处理变得很轻松。以往在C++里,我们一般是使用回调函数或者虚函数(接口),虽然也挺方便,但是如果有多个事件接收者就比较麻烦了,而且每个人实现的回调方式都不一样。在COM编程模型里的连接点也很好,允许多个事件接收者,甚至利用COM的机制跨进程回调通知,可惜实现太负责,调用也麻烦。最好还是像C#的event关键字,清晰明了。在尝试使用Attribu

optman的专栏 2532

VC++实现COM事件接收

1、给程序添加ATL支持。   右键->New ATL Object   2、实现IDispEventImpl 接口。   //EventSink.h#import "..\Server\Debug\Server.exe" raw_interface_only,no_namespace,named_guidsclass CEventSink :public IDispEventIm...

weixin_30340353的博客 376

vc++实现word应用程序事件监听及响应

WORD编程,个人认为应该首选c#或VB,因为

仙子崖 2376

COM 进程外连接点

namespace { //函数形式声明 _ATL_FUNC_INFO OnChangeInfo =  { CC_STDCALL, VT_I4, 1 , {VT_I4} }; } class CEventSink : public IDispEventImpl { public: CEventSink(){ //CoInitialize(NULL); };

844

如何使用C++响应COM事件处理

要在C++中处理COM事件,首先查询IConnectionPointContainer接口。然后调用接口上的FindConnectionPoint查找你需要的事件接口。然后使用IConnectionPoint::Advise将事件函数绑定到你自己的事件接口上去。如果不在使用。通过调用UnAdvice取消绑定。

mycjing的专栏 1479

VC++程序接收COM事件[转贴]

感谢原作者nelsonc,原文地址:http://blog.csdn.net/nelsonc/article/details/10856在VC++程序接收COM事件关键字:连接点 COM 事件 IDispEventImpl 接收事件COM客户端中非常重要的

ArthurFangmc的专栏 1926

连接点 COM 事件 IDispEventImpl

COM(Component Object Model,组件对象模型)以其巨大的潜力渗透到软件学科的各个领域。在Windows操作平台下,众多以COM形式提供的组件模块,极大地丰富了操作系统的功能。由于COM机制允许任意两组件之间相互通信而不必关心是在何种计算机上的何种操作系统下运行,也不用关心组件是使用何种语言编制的,这使COM技术拥有了强大的生命力。          接收事件COM客户端中

282

用Win32 API实现串行通信

2003-7-9 7:56:18   PCVC.NET   wangxi   阅读次数: 30453        串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。我们可以利用Windows API 提供的通信函数编写出高可移植性的串行通信程序。         在Win16中,可以利用OpenComm、CloseComm和WriteComm等函数打开、关闭

MuseIn的专栏 1272

VC++编写简单串口上位机程序

参考资源:VC++编写简单串口上位机程序 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一下,体验一下单片机...

weixin_33898233的博客 899

COM事件机制介绍一些文章

http://msdn.microsoft.com/zh-cn/library/1hee64c7(VS.80).aspx .NET Framework 开发人员指南COM 事件 本主题将概述连接点并介绍通常用于描述 COM 事件事件相关术语。连接点在 COM 环境中建立客户端和服务器之间的双向通信。利用这一机制,COM 服务器可以在发生某一事件时回叫客户端

杨德龙的专栏 1万+

使用VC++ ATL实现Office的COM插件

作者:useresu下载源代码摘要  本文介绍了一种使用VC++ ATL(Active Template Library),利用IDTExtensibility2接口,为Microsoft Word加入功能简单的COM插件(addin),加入工具栏按钮和菜单等可视部件,并为其加入响应事件的方法,并在最后简单说明了实现与Office宏混合编程的方法。  说到Office相关的编程,大家首先想到的可能

蜗牛档案室 4903

COM 连接点事件讲解

开发环境:VC++6.0测试环境:windows 2000 这篇文章是Alex C. Punnen.所写,在http://www.codeguru.com/上发表的,在此本人将其翻译成中文,和大家共享。 (注:本人翻译不当之处,还请各位多指正和谅解)运行环境:Windows 2000 Server, Microsoft Visual C++ 6此篇文章将用一个清晰的例子来描述COM中连

步入什么 3922

VC++调用COM(含连接点事件)过程

VC++调用COM(含连接点事件)过程:已COM组件GstRealDb为例,内含接口方法IRealDb和事件_IRealDbEvents,VC++调用过程如下:1、先建立连COM事件的继承类Sink,类继承自事件接口(_IRealDbEvents),新定义的类必须包含_IRealDbEvents的定义文件,应在新工程中包含(GstRealDb.h和GstRealDb.tlb)文件,例如

langonghan的专栏 2024

VC++ ATL连接点编程实战:从COM事件模型到可运行示例

在组件化软件开发中,事件驱动架构是实现松耦合、高内聚的关键技术。其核心原理是观察者模式,允许对象在状态变化时主动通知其他依赖对象,而非被动轮询。这一机制在Windows平台的COMComponent Object Model)技术中,通过连接点(Connection Point)标准实现,解决了单向接口调用的局限性。ATL(Active Template Library)作为COM开发的强力助手,通过模板类封装了连接点的复杂实现细节,将开发者从繁琐的接口指针管理和引用计数中解放出来,显著提升了开发效率与代

weixin_34175509的博客 328

实现COM口自动识别与界面显示的VC++项目教程

COM端口,即串行通信端口,是计算机与外部设备通信的接口之一。它通过串行方式逐位传输数据,广泛应用于工业控制、数据采集等领域。随着计算机技术的发展,虽然USB等新型接口逐渐成为主流,但COM端口因其独特的稳定性和兼容性,依然在特定场合发挥着重要作用。自定义枚举脚本通常使用一些脚本语言编写,如Python、Bash或PowerShell。选择合适的脚本语言需要根据目标操作系统环境和开发者的熟悉程度来决定。以Python为例,在Windows和Linux环境下,Python通常都预装或容易安装。

weixin_28968525的博客 754

COM 连接点事件

 转 http://blog.csdn.net/wovow/archive/2004/12/12/214017.aspx开发环境:VC++6.0测试环境:windows 2000 这篇文章是Alex C. Punnen.所写,在http://www.codeguru.com/上发表的,在此本人将其翻译成中文,和大家共享。 (注:本人翻译不当之处,还请各位

lhc5418的专栏 1791
下一篇: 使用ATL建立支持IClassFactory2的COM组件
nelsonc
博客等级 码龄25年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值