- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
13 自动化对象课件
十三. 自动化对象;1类型库;一个类型库可以包含多个COM对象,这些COM对象可以实现多个接口,而且一般而言实现了IDispatch接口(不是必须).为了标识这些类型库,也使用GUID来作为它的唯一标识LIBID.并且也在注册表中注册,注册位置是HKEY-CLASSES_ROOT\TypeLib,注册内容主要指明类型库所描述的对象的载体(dll文件等)的位置.
VB, Java等语言的开发者不需要直接面对类型库. 相反,它是由编译器环境(VB虚拟机,Java虚拟机)来解释它. 这样它使得开发者在开发期能够浏览接口的相关信息. (以VB为例,通过Reference添加对类型库的引用后,使用Object Browser就可以查看COM接口了, 另一个工具OLE/COM Object Viewer使用更加方便). 而开发人员只需要使用宿主语言简单的语法,非常方便地使用COM. (烦心事交给编译器的开发者去吧! 我们看到,如果不是使用COM,而是以一般的库函数的形式,在VB这样的高端应用中使用起来就没有这么简便(对最终开发者而言). 每一样复杂的技术,在使用者的舒适的背后,是底层开发者的艰辛)
当然,如果愿意,C++编译器也可以利用类型库. Visual C++IDE中的ClassWizard和C++BuilderIDE,DElphi中的importType Library命令都可以读入组件的类型库,并利用其中的信息产生C++代码。客户程序利用这些代码可以使用COM组件。;并不是只有IDE的开发者才知道怎样解析类型库. 为了操作类型库,Windows提供了一些API(LoadTypeLib 和LoadRegTypeLib等)和COM接口(ITypeLib和ITypeInfo等).
LoadTypeLib可以根据指定的文件名装载类型库,并返回ITypeLib接口.
使用LoadRegTypeLib可以根据类型库的LIBID查找注册表,找到类型库文件,返回ITypeLib接口.
ITypeLib接口代表了类型库本身.使用其GetTypeInfoofGuid根据接口的IID或者使用GetTypeInfo根据接口在类型库中的索引号可以返回ITypeInfo接口.
ITypeInfo接口则代表了接口的全部信息.包括有哪些方法,方法的签名等等. 如果接口是IDispatch接口,则还可以使用GetIDsofNames函数来根据方法的名字得到其分发ID,并使用Invoke函数通过方法的分发ID来执行这个方法.
因此,为了在编译时刻了解接口的信息, 客户程序要么得到COM组件的IDL文件(使用头类型定义头文件,在代码中通知编译器接口的类型,如C++), 要么得到它的类型库文件(代码中没有准确的信息,由IDE环境从类型库中读取接口类型信息,如VB), 才能顺利地构造客户应用程序,从而使用COM对象.
;无论是通过头文件,还是通过类型库,我们在开发客户程序时都有关于接口的先验知识.这些先验信息帮助我们顺利地编译客户程序.这种方式我们有时称为静态调用,或者早绑定(early binding).
但是,还存在这样的情况,有的语言在开发过程中并没有经过编译阶段,而是直接以源代码的形式被配置发布. 在运行时才被解释运行.比如以HTML为基础的脚本语言.(VBScript,JavaScript等).它们在浏览器或Web服务器的环境中执行. 脚本代码以纯文本的形式嵌入在HTML文件中. 为了丰富脚本的功能,它们也可以创建COM对象,执行特殊的功能,比如访问数据库等等. 比如:
var obj = new ActiveXObject(“LuBenjie.AutoObj);
alert(obj.Hello());
在脚本引擎中,目前还不能使用类型库或其他的先验知识来描述接口的信息.这意味着对象自身要帮助脚本解释器,将文本形式的脚本代码翻译为有意义的方法调用. 这种方式我们称为动态调用,或者晚绑定(late binding).
为了支持晚绑定,COM定义了一个接口,用来表达这种翻译机制,这个接口就是IDispatch.分发接口有时称为自动化接口,实现了此接口的对象称为自动化对象.
自动化接口的定义如下:
;class IDispatch:public IUnknown
{public: HRESULT GetTypeInfoCount( unsigned int FAR* pctinfo );
//如果对象提供类型支持,则返回1,否则0. 客户在获取类型信息之前先使用此函数进行判断.
HRESULT GetTypeInfo( unsigned int iTInfo, LCID lcid, ITypeInfo FAR* F
您可能关注的文档
最近下载
- 公路水运工程试验检测考试(桥梁隧道)习题库(第4部分).pdf VIP
- 济南城市轨道交通4号线一期工程环境影响报告书(受理公示).pdf VIP
- 公路水运工程试验检测考试(桥梁隧道)习题库(第3部分).pdf VIP
- 公路水运工程试验检测考试(桥梁隧道)习题库(第2部分).pdf VIP
- 一种氟硅酸制备氢氟酸联产白炭黑的方法.pdf VIP
- 物质的量(一)孙红保1案例.ppt
- 云南省红河哈尼族彝族自治州蒙自市2024部编版小升初语文全真模拟测试卷.pdf VIP
- 控轧控冷-.ppt VIP
- 成都七中科学城2025小升初入学分班考试语文考试试题及答案.docx VIP
- 燃煤电厂锅炉烟气袋式除尘工程技术规范 DLT 1121-2020.docx VIP
文档评论(0)