采用COM连接点在程序中触发事件

ZDNet软件频道 时间:2002-11-05 作者:BUILDER.COM |  我要评论()
本文关键词:
COM连接点提供了相当多的灵活性,因为其子接口能够调用所有的功能函数并允许在不同进程之间进行。一旦你领悟了这些原理,在编程过程中你就会觉得游刃有余。

组件对象模型(COM)连接点是能够处理事件回调功能的接口。如果你经常使用Win32 API,你一定会熟悉事件回调函数。回调函数在程序中频繁出现,如EnumWindows()

虽然COM连接点比普通连接点复杂,但它能够提供更灵活的功能,因为所有的参数和回调函数都使用COM子接口来执行。COM子接口允许各个函数在不同进程之间相互调用,这在普通回调函数中是不允许的。

接口与事件

在讲述如何在程序中添加COM连接点之前,你首先你应该对基本的术语有个了解,比如:接口,事件类型。很多相关的事件都被集成为接口。通常,一个COM对象的接口与一个C++类中的全局函数很类似,所以一个连接其实把一系列的事件包含在一个COM接口上。

例如Listing A中的定时器类。这一个类包括了SetExpiredProc(), SetTime(), Start(),Stop(),及构造函数CExampleTimer()和一个局部函数的RunTimer()。描述这些特性的一个COM接口只包括相关的全局函数,如SetTime(), Start(), Stop()。你可以建立一个包含名为TimerExpired()的事件的COM接口连接点。

客户端/服务器与接受器/发送器

在典型的COM程序中,一个COM对象是带有特定接口的服务器,与之相连的客户端执行一定的事件。当触及连接点时,COM服务器就向客户端传递信息,这一信息包括:服务器端已经发生触发事件,哪一个客户端想接受。此时,匹配的客户端即接受相关的事件。所以当提及连接点时,服务器一端称为发送端,而客户端称为接受端。

可以看出,标准服务器-客户端的COM连接点与普通程序的主要区别为,前者的服务器一端能够提供客户端执行的一系列事件。

连接接受器到发送器

从术语本身你可以想到连接点的工作过程。第一,接受器通过执行IconnectionPointContainer接口与发送器连接起来,IconnectionPointContainer接口提供两个方法:

  • FindConnectionPoint()允许接受器询问发送器是否触发了事件
  • EnumConnectionPoints()允许接受器询问发送器的所有事件类型

为了把问题简单化,假设接受器知道它自己想接受的事件,这样接受器通过事件类型COM接口调用IConnectionPointContainer::FindConnectionPoint()方法。如果一切顺利,接受器就获得一个指向IconnectionPoint接口的指针。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134