转载请标明是引用于 http://blog.csdn.net/chenyujing1234
参考书本:
《EVC高级编程及其应用开发》
客户是主动的,而组件是被动的,组件通过自身暴露给客户的接口来监听客户请求,一旦接收到客户请求便宜做出反应,
这样的接口称为“入接口”(Incoming Interface).
与入接口相对应,对象也可以提供"出接口",对象通过这些出接口与客户进行通讯。出接口包含一组成员函数,每个函数代表一个通知。
如果一个COM对象支持一个或多个接口,那么我们称这样的对象为可连接对象(Connectable Object).
出接口与入接口的区别:
入接口是由COM对象本身来实现的,而出接口是由客户程序来祥瑞的,客户程序实现这些接口,并把接口指指告诉对象,以后对象便利用此接口与客户程序通信。
在客户程序方,实现这些接口的对象称为"接收器"(Sink).
整个通讯过程涉及到三个独立又相关的部分:客户、对象和接收器。
以下是它们的关系:
1、可连接对象的基本结构
可连接对象可以通过一个或多个出接口与客户端通讯。COM中约定可连接对象必须实现一个IConnectionPoointCaotiner接口,用于管理所有的出接口。
每个出接口对应一个连接点对象,而连接点对象实现了IConnectionPoint接口,客户可通过IConnectionPoint接口与连接对象建立连接。
2、客户程序与可连接对象的关系。
连接器也是一个COM对象,它位于客户程序内部,并不需要通过COM库来创建,因此接收器不需要CLSID标识。
客户与可连接对象建立连接的过程如下:
(1)调用pUnk->QueryInterface3(IID_IConnectionPointContainer,&pConnectionPointContainer),得到连接点容器接口
(2)调用pConnectionPointContainer->FindConnectionPoint(IID_IsomeEventSet, pConnectionPoint)查找指定的连接点对象
(3)调用pConnectionpoint->Advise(pSomoeEventSet, &dwCookie)建立与接收器的连接
(4)当客户端要取消连接时,需要先调用pConnectionPoint->Unadvise(dwCookie)
=====================================================================================================