编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> Visual C++ >> 教程正文 在VC++程序中接收COM事件
推荐位

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

中国个人站长站 Visual C++ 点击数: 更新时间:2004-8-25

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实现连接点

接收事件的就必须实现一个专用的COM对象,这也是实现上最困难的地方。而且,很多连接点都要求通过IDispatch接口传递事件,这样就造成了更大的困难。

我们按照步骤说明如何编写代码在普通的应用程序中接收通过IDispatch接口发送的事件。

2.1     添加ATL头文件

使用ATL前必须包含以下头文件:atlbase.hatlcom.h,并且定义_Module变量[2]。把以下代码加到stdafx.h是最方便的:

 

#include <atlbase.h>

 

extern CComModule _Module;

#include <atlcom.h>

 

cpp文件中要对_Module进行定义。如下:

 

CcomModule _Module;

 

在添加了这两行之后,我们就可以使用ATL的功能了。而不必创建ATL的项目。

当然,如果项目是通过ATL项目向导产生的就不必再次添加头文件了。

2.2     ATL初始化

使用ATL

[1] [2] [3] 下一页

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《在VC++程序中接收COM事件》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号