- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(可连接对象
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接口,客户通过连接点对象建立接收器与可连接对象的连接。连接点即可以访问可连接对象的内部信息,也可以访问客户方的接收器,而其它可以直接使用可连接对象的引用计数器。
7、枚举器
在COM规范中,枚举器(Enumerator)只是一个概念,没有确定的接口用于规定枚举器的各项操作,这是因为枚举器所枚举的数据单元的类型不确定,所以也无法给出确切的定义。客户程序利用枚举器对COM对象中的数据单元进行枚举操作,枚举器把客户对数据单元的操作进行了标准化,因此,COM对象可以按照标准的方法把数据提供给客户,而不必建立二者之间新的协议。
因为枚举器对象是一个内部对象,它只需暴露枚举接口,不需要CLSID和类厂,所以枚举器对象的实现比较简单,只需实现枚举操作并控制好引用计数即可。
客户的接收器与源对象的连接点建立连接时,源对象使用连接点枚举器管理连接点对象,连接点对象又用连接枚举器管理连接,通过两层结构建立对象与接收器之间的连接。把源对象与连接点对象分开实现,可以使它们各自保持一定的独立性。源对象与接收器之间的连接具有很好的扩展性,而且连接点对象的独立性也使得COM可连接对象机制更具灵活性和广泛性。
8、接收器的实现
在C++语言中,用一般的类从接口类派生,然
文档评论(0)