打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
COM原理及应用----命名和绑定技术

1、COM对象的创建方法

   客户程序可以通过CoCreateInstance函数创建COM,在创建之前必须知道对象的一些基本情况,比如对象的CLSID或者对象的ProgID。

   另一种对象创建方法通过名字对象(moniker)创建,就利用对象命名和绑定技术(即名字技术)。

  2、名字技术的地位

   名字技术算不上COM的基本核心,但也COM体系结构中重要的组成部分,它为客户程序和组件程序提供了另一条更为灵活的联系纽带。OLE的成功使名字技术得到了广泛的应用,而且在OLE和COM的不断发展过程中,名字技术发挥了其强大的扩展特性,异步名字对象的实现使它超越了OLE的应用范围,能更好地适用于网络环境,特别Internet网络,体现了名字技术强大的生命力。

  名字技术允许客户程序通过符号化的方式访问组件对象,而不必通过CLSID和类厂访问COM对象。名字技术不仅为COM对象提供了符号化的表达方式,而且它充分体现了面向对象软件体系的一些重要概念,甚至可以把它当作软件体系结构的一项技术来学习。

  3、COM名字技术包括两方面内容:命名技术和绑定过程

  4、名字对象

   名字技术的核心名字对象,COM使用术语”moniker”来表示名字对象,它本身也一个COM对象。名字对象为组件对象提供了符号化的表示方法,同时它也对组件对象进行了全面的封装,客户程序只需创建相应的名字对象,然后利用名字对象的绑定功能得到组件对象。名字对象能够自动使组件对象从被动状态进入运行状态,所以名字对象也称为永久智能名字(persistent intelligent names)。

   名字对象封装了组件对象的所有状态处理过程,因此客户程序可以按照统一的方法处理名字对象,即使要引用新的组件对象,客户代码也不必作任何改动。

  5、文件名与名字对象

   文件名字对象(file moniker)一种基本的名字对象,文件名也通过符号化的字符串名指向实际的文件。文件名代表了一个磁盘文件,文件名本身不一个对象,它只代表了文件对象的路径,因此,文件名不具有智能特性。

   COM对象的永久状态可以整个文件,也可以文件的一部分。

   虽然名字对象扮演了与文件名相同的角色,但名字对象的功能要强大得多。首先,它所表达的对象范围广阔得多,除了一般的文件对象,它也可以表达文件中的部分内容,其次,名字对象具有智能特性,即它可以使被动态的对象自动进入运行态,名字对象找到与永久状态联系的运行代码,并启动这些代码,利用对象的初始化功能使对象进入运行状态,这个过程就名字对象的绑定操作。

  6、名字对象的绑定过程

   名字对象实现了标准的COM接口IMoniker,客户程序通过IMoniker接口获得组件对象。

   客户程序通过名字对象访问组件对象可以分成两步:第一,获得名字对象;第二,执行名字对象的绑定操作(使用IMoniker接口的函数BindToObject),绑定过程的结果就组件对象的接口指针。

   客户程序获得名字对象的途径有两条:第一,调用COM API函数,如MkParseDisplayName和CreateFileMoniker;第二,其他对象的接口成员函数传递过来,或者通过其他的数据传输机制得到,比如通过剪贴板或拖-放操作等。

  7、IMoniker

  (1)    名字管理函数:IsEqual、Hash、IsRunning、GetTimeOfLastChange。

  (2)    绑定函数:BindToObject、BindToStorage。

  (3)    复合名字对象管理函数:Reduce、ComposeWith、Enum、Inverse、CommonPrefixWith、RelativePathTo、IsSystemMoniker。

  (4)    名字解析函数:GetDisplayName、MkParseDisplayName。

  8、复合名字对象

  复合名字对象由一组其他的名字对象组成,也可以包括其他的复合名字对象,复合名字对象提供了一种创建任意复杂名字的机制。COM提供了一个标准的复合名字对象实现,称为“通用复合名字对象(generic composite moniker)”,并提供了标准API函数创建此类名字对象:CreateGenericComposite。

   IMoniker接口从IPersistStream派生而来,所以名字对象也一个永久对象,它可以有自己的永久状态。复合名字对象的永久状态一个流,它顺序保存了每个组成名字对象的永久状态。

   通用复合名字对象按统一的方式处理它的各个成员名字对象,无论绑定过程还其他一些操作,如名字解析、名字简化等。   

   COM使用运行对象表(ROT,running object table)表管理当前系统中正在运行的、已经被注册的名字对象,客户程序可调用COM API函数GetRunningObjectTable得到ROT表的IRunningObjectTable接口指针。

  IMoniker接口的大多数成员函数以及其他一些API函数都包含一个被称为绑定环境的对象,在这些函数中,以IBindCtx接口指针的形式出现。绑定环境对象主要用于名字对象的整个绑定过程,所以它包含了绑定过程所需要的一些信息。由于绑定环境对象COM实现的系统对象,所以COM提供了一个API函数创建它:CreateBindCtx。绑定过程比较耗

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
com 名字对象(2)创建名字对象(IMoniker)
COM编程技术基础概述之六
VC知识库文章 - COM 组件设计与应用(一)——起源及复合文件
spring中用到哪些设计模式
面象对象的思想
我对COM的理解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服