COM道理及应用—-可毗连工具
1、COM的高级特性
COM类型中有一些高级特性,如可毗连工具、永久存储、一致的数据传输等,使COM类型具有更强的生命力,它们也是OLE的基本,但它们的应用又不只仅范围于OLE,这些高级特性已经遍及应用于Windows操纵系统上。
2、入接口、出接口与吸收器
入接口(incoming interface)是组件袒露给客户,被动地监听并为客户请求作出回响的接口。而出接口(outgoing interface)是指组件主动与客户举办通信的接口。
出接口不是由工具实现的,而是由客户措施来实现,客户实现这些接口,并把接口指针汇报工具,今后工具操作此接口指针与客户举办通信。在客户措施方,实现这些接口的工具被称为吸收器(sink)。吸收器自己也是一个COM工具,但它往往较量简朴,只用于监听处理惩罚组件工具的通知或请求。
客户与工具之间的干系是相对的,入接口和出接口也是一个相对观念,它们只用于通信的一个偏向。
3、可毗连工具
假如一个COM工具支持一个或多个出接口,则称这样的工具为可毗连工具(connectable object),或称为源工具(source)。
可毗连工具的出接口也是COM接口,它包括一构成员函数,每个成员函数代表了一个事件(event)、一个通知(notification)可能一个请求(request)。
4、事件、通知与请求
事件和通知在观念上是完全一致的,只是用在差异的场所,譬喻在COM工具中当某个属性被改变时,它可以给客户发送一个通知;而当特定工作产生时,好比按时动静或用户鼠标操纵产生时,工具发生一个事件,客户措施可以处理惩罚这些事件。然而,请求的观念则稍有差异,工具给客户发出请求,它但愿客户能提供某些信息,期望客户能有应答。
从COM类型的意义上来讲,不管是事件、通知照旧请求,它们都通过出接口的成员函数来实现。
5、客户与可毗连工具的干系
固然吸收器也是一个COM,但它有非凡性,它位于客户措施内部,并不需要通过COM库来建设,所以吸收器并不需要CLSID来标识,也不需要类厂,吸收器的标识和建设进程完全是客户措施内部的工作。对付客户措施外部而言,吸收器也是一个单独的COM工具,它有本身的引用计数,有本身的接口查询要领,即 QueryInterface成员函数。COM只要求吸收器是一个独立的COM工具,COM类型对吸收器的实现没有任何限制。
一般可毗连工具不该该向吸收器工具请求其他的接口,即不该该挪用吸收器的QueryInterface成员函数。吸收器凡是专用于某个出接口指针,吸收器工具只实现该出接口,虽然出接口是基接口(好比IUnknown)除外。
可毗连工具和吸收器可以形成一对多可能多对一的干系,也即客户与可毗连工具之间可以是一对多可能多对一的干系。
6、可毗连工具的根基布局
可毗连工具可以支持一个或多个出接口,它通过接口IConnectionPointContainer打点所有的出接口。对应于每个出接口,可毗连工具又打点了一个称为毗连点(connection point)的工具,每一个毗连点工具实现了IConnectionPoint接口,客户通过毗连点工具成立吸收器与可毗连工具的毗连。毗连点即可以会见可毗连工具的内部信息,也可以会见客户方的吸收器,而其它可以直接利用可毗连工具的引用计数器。