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

本文详细介绍了如何在VC++程序中通过ATL实现接收COM事件,包括理解COM事件原理,使用ATL添加头文件并初始化,创建事件接收器类,以及连接和关闭连接对象的步骤。实例代码展示了如何在非ATL项目中接收通过IDispatch接口发送的事件。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值