- 30
- 0
- 约1.14万字
- 约 26页
- 2017-12-23 发布于上海
- 举报
自动化对象
十一. 自动化对象 概念澄清:就概念而言,类型库与自动化接口IDispatch没有任何关系,但是在应用上却有着极其密切的联系.为了准确把握自动化对象,先要准确地理解它们的概念. 当然, 自动化对象与自动化控制更是没有任何关系,碰巧使用了同一个词而已…… 类型库 IDispatch接口 自动化对象的实现 使用自动化对象客户 晚绑定 DISPID绑定 早绑定、 自动化对象编程实践 1类型库 COM不仅追求C++编译器的中立,而且追求语言的独立性. 因此它使用IDL语言来描述接口. 然后在IDL到具体的语言之间建立映射. 但是一些数据类型在有些语言中难以表达。比如复杂的结构类型,指针类型,函数指针等等在一些弱类型的高级语言中比如Java, Visual Basic等等并没有得到支持. IDL到这些语言的映射不能顺利地进行. 客户通过接口调用对象时,在编译时刻需要接口的准确的描述, 这个描述正是来自于MIDL对IDL编译后产生的头文件, 而Java, VB等无法使用这种基于C/C++的头文件. COM的语言无关性受到很多的限制。 因此, MS使用类型库来解决这个问题. 类型库文件是一个二进制文件, 后缀为.tlb.用MIDL工具编译idl文件可以产生类型库文件,在实际的开发过程中不一定要手工使用MIDL工具,IDE对其进行了集成. 编译完成以后,我们可以选择把它随组件库一起分发. 类型库以机器可读的方式描述了组件与外界交互的必要信息. 如COM对象的CLSID, 它支持的接口的IID,接口的成员函数的签名等等. 本质上它等价于描述接口的C/C++头文件. 一个类型库可以包含多个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对象. 2 IDispatch接口 无论是通过头文件,还是通过类型库,我们在开发客户程序时都有关于接口的先验知识.这些先验信息帮助我们顺利地编译客户程序.这种方式我们有时称为静态调用,或者早绑定(early binding). 但是,还存
您可能关注的文档
最近下载
- 《民法典之债权法》课件.ppt VIP
- 提高出院患者随访率PDCA.pptx VIP
- 《广告学概论》PPT课件共482页.pptx VIP
- 2024-2025湘教版地理初中七年级下册(2024)第九章 走进国家《第二节 埃及》教学设计 .pdf
- 市场营销沙盘对抗 教案.pdf VIP
- 《大学生职业生涯规划与就业指导(应用型)》教案 第3课 职业环境分析.pdf VIP
- 《读书是教师最好的修行》教师读书分享课件.pptx VIP
- 管线迁改工程施工方案施工组织设计投标方案(技术方案).doc
- 2025年核实物保护系统薄弱性分析方法现状及发展.pptx VIP
- 《大学生职业生涯规划与就业指导(应用型)》教案 第1课 职业生涯规划概述.pdf VIP
原创力文档

文档评论(0)