`

COM原理及应用----自动化(Automation)对象

    博客分类:
  • COM
阅读更多

1、自动化技术

       自动化技术既以前提到的OLE自动化。虽然自动化技术建立在COM基础上,但自动化要比COM应用广泛得多。一方面,自动化继承了COM的很多优点,比如语言无关、进程透明等特性;另一方面,自动化简化了COM的一些底层细节,比如属性和方法的处理、一组专用于自动化的数据类型等。自动化也是OLE的基础,所以可以把自动化看作COM和OLE中间的一项技术。自动化的核心是IDispatch接口,每一个自动化对象都必须实现IDispatch接口。自动化技术并不复杂,它实际上是COM的一个特例。

 

2、自动化产生与发展

       COM的语言无关性在使用一些弱类型的高级语言时很受限制,而自动化为这些高级语言提供了另一条程序相互通信的直观且友好的途径。

       自动化技术的发展与Visual Basic和VBA有直接的关系。首先,VBA(或VBScript)已经发展成为大多数Microsoft应用程序扩展的标准,其次,Microsoft Visual Basic开发工具的成功应用也推动了自动化对象的发展。自动化技术为Visual Basic与其他语言的协作开发提供了一条捷径。

       通过自动化编程接口,不同应用程序之间的通信可以在VBA或者VBScript层次上进行,甚至根本不需要知道列集和RPC调用的概念。自动化是位于上层(应用层)的组件技术,它可以面对最终用户,比如宏语言编程。

       自动化对象的IDispatch接口可以作为OLE的标准接口,由于OLE已经提供了标准的接口代理和存根组件,所以自动化对象即可以运行在DLL组件中,也可以运行在EXE组件中。如果在分布式环境下,那么自动化对象可以被远程客户创建或连接。

 

3、属性和方法

       方法(method)和属性(property)是自动化对象的两个基本特性,方法是指自动化对象所提供的功能服务;而属性是指自动化对象的数据特征。

       从本质上讲,属性是一个值,它既可以被设置,也可以被获取。

       方法要比属性灵活得多,它们可以具有零个或多个参数,它们既可以设置也可以获取对象数据,最常见的是完成某些动作。

       自动化对象的属性和方法都有符号化的名字,客户程序通过名字就可以访问到自动化对象的属性或者方法。

 

4、类型库和ODL

       组件对象的类型信息是指它与外界进行交互的一些必要信息,包括组件的CLSID、它所支持接口的IID、接口的每个成员函数、成员函数的参数和返回值类型等等,类型信息中的数据类型也可以是自定义的数据类型,如C语言风格的结构、联合、枚举等。

       Microsoft扩充了IDL形成ODL(object description language ,对象描述语言),可以描述组件对象的类型信息。一般来说,一个组件对象的类型信息包括每个接口的类型信息和对象的类型信息,接口类型信息的描述方法与 IDL完全兼容。接口类型信息使用interface 或dispinterface 关键字描述;对象类型信息使用coclass关键字进行描述。每个ODL文件可以描述多个组件对象,经过MIDL或者MkTypLib工具可编译得到类型库。通常把一个组件程序中的所有对象放在一个ODL文件中,并用library关键字描述库信息,包括类型库的ID(即LIBID)、类型库所使用的语言、版本等。在ODL文件中也可以使用importlib引入其他类型信息。

       用MIDL实用工具编译ODL文件可以得到类型库文件,其后缀为TLB,也可以产生相应的.h头文件。

       使用类型库的好处有两点。一是VB或者VBA可以使用类型库来浏览组件对象的方法和属性,它也可以利用类型库增强对属性和方法的访问;二是在实现自动化对象的IDispatch接口时,可以利用类型库向客户程序提供类型信息,这可使我们避免繁琐的类型处理。

 

5、IDispatch接口

       成员函数Invoke是个关键函数,客户程序必须通过Invoke函数才能访问属性或方法,也可以说Invoke函数是自动化对象的命令翻译器。

 

6、自动化兼容的数据类型

       自动化对象使用的基本数据类型为VCRIANT结构类型。整个VARIANT结构的大小为16字节,但它描述了所有自动化对象可以使用的数据类型。

 

7、IDispatchEx接口

       IDispatch接口描述的类型信息是静态的,在运行过程中类型信息不会被改变,在编译时刻通过类型库就可以获得所有的类型信息。然而,在一些脚本语言中,我们需要在运行时刻动态提供类型信息,IDispatchEx接口这是适应这样的要求而建立起来的,它继承了IDispatch接口的成员函数。

 

8、自动化对象实现——类型库支持

      

9、自动化对象实现——Invoke函数实现

      

10、自动化对象实现——异常处理

      

11、自动化对象实现——多语种,本地化

      

12、自动化对象实现——用CreateStdDispatch函数实现自动化对象

      

13、自动化对象应用——双接口

       自动化控制器通过IDispatch接口可以调用自动化对象的所有方法和属性,但由于这种调用是通过Invoke成员函数间接进行的,中间经过几重处理,调用的效率损失很大。当然这种方式为高级语言客户程序提供了极大的便利,不过有的客户程序不一定希望这种效率损失,它希望能够直接通过vtable调用到成员函数代码。为了同时满足这两种情形,自动化对象可以在实现IDispatch接口的基础上,把方法和属性函数也以接口成员函数的方法暴露出去,这样就形成了双接口(dual interface)的概念


14、自动化对象应用——迟绑定和早绑定

       由于自动化对象使用类型库对参数类型进行检查,而类型库文件独立于自动化组件,因此,不仅自动化对象可以利用类型库实现它的IDispatch成员函数,自动化控制器也可以利用类型库对方法或属性的参数进行检查。

如果自动化控制器利用对象的类型库,在编译时刻对参数类型和返回值类型进行检查,并直接用分发ID调用Invoke函数,我们把这种调用方法称为早绑定(early binding)技术。

相对应地,控制器也可以在运行时刻通过IDispatch接口的成员函数获得类型信息,当它访问一个属性或方法时,它要调用IDispatch::GetIDsOfNames,以便根据符号化名字找到分发ID,我们把这种调用称为迟绑定(late binding)技术。

选择使用早绑定或者迟绑定取决于控制器的运行环境,而调用效率并不成为判断的依据。

 

15、自动化对象应用——自动化集合对象

       集合对象也是一个自动化对象,但它有一些特殊的要求。首先,作为一组同类对象(或数值)的容器对象,它必须提供枚举这些成员的方法;其次,它必须支持Add、Remove和Item方法以及Count属性。

 

16、自动化对象应用——一IDispatch作为出接口

      

17、自动化对象应用——自动化控制器

      

18、自动化对象编程——MFC对自动化对象的支持

 

19、自动化对象编程——COleDispatchDriver类

 

20、自动化对象编程——在Visual Basic中使用自动化对象

分享到:
评论

相关推荐

    基于C#UI Automation自动化测试自动化测试示例工程

    UI Automation是.NET Framework提供的一种用于测试Windows应用程序用户界面的技术,它允许开发者编写自动化脚本来模拟用户与界面元素的交互,如点击按钮、输入文本等。 【描述详解】 描述中提到的“15个按钮示例”...

    A COM-based Automation Wave File Editor一个基于COM自动化的Wa

    标题中的"A COM-based Automation Wave File Editor"是一款利用COM(Component Object Model)自动化技术开发的Wave音频文件编辑工具。COM是微软提出的一种软件组件模型,它允许不同编程语言编写的对象相互通信,...

    COM原理与应用源代码

    - 使用Automation(自动化)技术实现客户端对组件的自动化控制,如在VBA或其他支持Automation的语言中调用COM组件。 - 处理和传递COM错误,以及实现自定义错误处理机制。 通过学习和实践这些源代码,开发者不仅可以...

    com 组件原理与应用源码

    - **自动化(Automation)**:使COM组件对脚本语言(如VBScript和JScript)可见,支持自动化任务。 - **事件(Events)**:介绍如何在COM组件中实现事件,以及事件处理程序的编写。 - **COM+服务**:探讨COM+是如何...

    iOS自动化侧之UI Automation

    虽然UI Automation已经不是苹果官方推荐的最新自动化测试工具,但它作为iOS自动化测试领域的重要里程碑,其设计理念和实现原理对理解现代自动化测试框架仍具有参考价值。通过掌握UI Automation,不仅可以加深对iOS...

    Simple-VB-OPC-Automation-Example.rar_VB_VB OPC_opc client VB

    OPC(OLE for Process Control)是工业自动化领域中用于数据交换的一种标准接口,它允许不同的软件应用程序之间进行通信,特别是连接PLC(可编程逻辑控制器)和其他自动化设备。VB(Visual Basic)是一种由Microsoft...

    COM原理与应用高清pdf%2B随书源代码

    8. **自动化(Automation)**:COM自动化允许非托管代码(如Visual Basic)和托管代码(如.NET)之间的互操作,使得COM组件对脚本语言友好。 9. **安全性**:COM提供了安全机制,如访问控制列表(ACLs),确保组件...

    siebel自学2 - Automation2

    本课程不仅提供了Siebel 8.1.x版本中业务自动化的基本概念和原理,还通过实际案例操作让学员能够熟练掌握如何在实际工作中应用这些自动化技术。通过学习本课程,学员将能够更好地应对日益复杂的业务需求,提高工作...

    Complex-VB-OPC-Automation-Example.zip_Complex VB OPC

    OPC是一种标准接口,允许不同软件应用程序在过程控制和自动化领域进行数据交换。此标题可能指的是一个使用VB来实现OPC客户端功能的示例代码库或教程。 **描述解读:** "基于Visual Basic平台的OPC客户端...

    COM 组件 (MFC 篇)、COM原理与应用

    7. **自动化(Automation)**:COM支持自动化,允许不同编程语言的对象互相调用,使得VB、C++、JavaScript等语言可以无缝协作。 8. **事件(Events)**:COM通过接口实现事件发布和订阅,使得组件之间能进行异步...

    COM原理与应用例子程序代码

    7. **自动化与ActiveX**:COM是ActiveX的基础,例子可能包含ActiveX控件的创建和使用,以及如何通过Automation接口与其他应用程序交互。 在提供的压缩包中,"errata.doc"可能是作者或读者发现的书中错误列表,对于...

    COM组件的原理及应用(附源码)

    在COM组件中,接口的实现是通过IDispatch接口进行的,这是COM提供的一种通用接口,用于支持晚绑定和自动化。晚绑定允许在运行时确定方法调用,而自动化则使得脚本语言和其他非类型安全的语言可以调用COM组件。 COM...

    数据库原理习题1-5章.doc

    * 数据库系统的应用包括 Decision Support System(决策支持系统)、Office Automation System(办公自动化系统)和 Enterprise Resource Planning System(企业资源计划系统)等。 数据库设计 * 数据库设计是指...

    《com原理与应用》示例代码\源代码

    3. **OLE Automation**:这部分代码可能涉及如何使COM组件支持OLE Automation,以便可以被脚本语言(如VBA)或自动化工具调用。 4. **事件和接口**:示例可能包含事件发布者和订阅者的实现,展示如何通过接口传递...

    COM原理与应用编程实例

    2. **OLE Automation**: COM的一个子集,用于支持自动化服务器,使得脚本语言如VBA可以方便地调用COM组件。OLE Automation定义了一组标准接口,如IDispatch,允许脚本语言进行动态类型调用。 3. **ActiveX**: ...

    COM原理与应用

    同时,理解COM也可以帮助开发者更好地理解和利用许多Windows API和第三方库,如Office自动化、DirectX等。通过VC++进行COM开发,可以充分利用C++的性能和灵活性,实现高效且可靠的组件化软件设计。

    com 组件原理与应用

    - **Automation**:允许脚本语言(如VBScript或JavaScript)控制和支持自动化任务的组件。 - **DLL地狱问题的解决**:通过版本控制和注册表管理,避免不同版本的动态链接库冲突。 “COM原理与应用”这本书可能详细...

Global site tag (gtag.js) - Google Analytics