COM 事件

更新:2007 年 11 月

本主题将概述连接点并介绍通常用于描述 COM 事件的事件相关术语。

连接点在 COM 环境中建立客户端和服务器之间的双向通信。利用这一机制,COM 服务器可以在发生某一事件时回叫客户端。例如,服务器(如 Microsoft Internet Explorer)可以引发一个事件,以报告对其客户端程序的更改(如标题更改)。客户端创建一个称作事件接收器的内部 COM 对象来为传入通知做准备。一旦收到通知,客户端就可以执行与该事件关联的操作。

事件接收器提供用于向服务器公开事件相关方法的接口。服务器通过调用这些事件相关方法来引发事件。客户端会将事件接收接口当作普通的 COM 接口来实现。服务器将该接口声明为输出接口;COM 服务器的创作者将 source 属性应用于 COM 服务器类型库中的接口。服务器使用来自事件接收接口的定义来标识 sinkinvoke 方法。

实现事件接收接口的 COM 客户端通常称作事件接收器,或简称为接收器。在下图中,接收器实现 ISinkEvents 接口。引发事件的服务器称作源。

连接点事件模型

COM 事件

当建立事件接收接口后,接收器必须连接到源上。连接点机制将使用以下协议来连接接收器和源:

  1. 接收器对服务器对象查询 IConnectionPointContainer 接口。如果该对象支持连接点,它将返回一个指针。

  2. 接收器使用容器对象的方法来查找表示特定连接点的 IConnectionPoint 接口。由于服务器可以支持多个输出接口,客户端必须使其接收器匹配特定连接点接口的接口标识符 (IID)。

  3. 获取正确的连接点对象后,接收器将调用 IConnectionPoint::Advise 来注册其接收接口指针。服务器(源)将保持连接(并向其引发事件),直至客户端通过调用 IConnectionPoint::Unadvise 中断连接。

Visual Basic 会隐藏连接点的大多数详细信息;但是,您必须在客户端的服务器声明中包括 WithEvents 指令。在 C++ 中,客户端代码必须查询 IConnectionPointContainerIConnectionPoint 并对它们调用方法。服务器实现这两种接口。

请参见

任务

如何:引发 COM 接收器所处理的事件

如何:处理 COM 源引发的事件

其他资源

托管和非托管事件