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

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函数是自动化对象的命令翻译器。

时间: 2024-11-18 00:37:31

COM原理及应用----自动化(Automation)对象的相关文章

COM原理及应用----可连接对象

1.COM的高级特性 COM规范中有一些高级特性,如可连接对象.永久存储.一致的数据传输等,使COM规范具有更强的生命力,它们也是OLE的基础,但它们的应用又不仅仅局限于OLE,这些高级特性已经广泛应用于Windows操作系统上. 2.入接口.出接口与接收器 入接口(incoming interface)是组件暴露给客户,被动地监听并为客户请求作出反应的接口.而出接口(outgoing interface)是指组件主动与客户进行通信的接口. 出接口不是由对象实现的,而是由客户程序来实现,客户实现

Symbian编程总结-基础篇-活动对象正解(3)-活动对象的工作原理

在上一节里我们已经知道如何创建和使用活动对象,大家对活动对象的创建.使用都有了一定的了解.在这一节里我将深入活动对象机制,分为"活动对象的工作流程"."信号迷失错误"两个部分,为大家剖析活动对象的工作原理. 一.活动对象工作流程 首先我们用时序图来说明一下应用程序.活动对象.活动调度器及异步函数服务器之间创建及调用的流程: 下面我们针对每一个步骤结合代码(点击此处下载代码)进行说明: 1.创建并安装活动调度器: CActiveScheduler* scheduler

如何使用MFC和类型库创建自动化项目

摘要 本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序. 更多信息 下面部分介绍了如何创建MFC项目.采用Microsoft Excel举例,你可以将前8个步骤用于 任何项目,修改9-15步用于不同的应用程序. 创建自动化项目 1. 在Microsoft Developer Studio中,创建"MFC AppWizard(exe) "项目,命名为"AutoProject." 2. 在第1步的MFC应用程序向导中,选择"D

第八章-对象链接与嵌入(二)(3)

8.4.2 创建OLE自动化服务器 OLE自动化服务器是应用程序或动态链接库(DLL),它可向OLE 自动化控制器输出OLE对象. MemoEditdpr 就是OLE 自动化服务器, 在MemoAuto 单元中注册了MemoEdit.Appdication自动化类,所有OLE控制器均可对MemoEdit.Application进行引用. 在Windows环境下有两种OLE自动化服务器,进程内服务器和进程外服务器, Delphi可创建这两种服务器. 进程内服务器是输出OLE自动化对象的动态链接库.

自动化基础概念之“COM组件与接口”

在前文,我预告了我将开始介绍WINX对自动化(Automation)的支持.首先我打算解释一下自动化(Automation)相关的概念. 我们会分为3个篇幅介绍: ·COM基础:COM组件(Component)与接口(Interface) ·变体(Variant)与IDispatch(Dispatch调用) ·自动化(Automation).OA(Office Automation).二次开发接口(应用程序开发接口,API)与类型库(TypeLib) 这是第一篇. COM组件(Component

QTP自动化测试之VBScript基础

要想使用QTP进行自动化测试,必须了解VBScript这门语言,对于使用过ASP或VB开发的人来说,VBScript已经再熟悉不过了,但是没有接触过VBScript的同学也不要灰心,因为这门语言简单易学. 1. VBScript利器  2. Hello World  3. 数据类型  4. 变量  5. 常数  6. 运算符 1. VBScript利器 子曰:工欲善其事,必先利其器.学习一门语言自然是离不开工具及文档,有好的工具及文档在手,学习起来也会得心应手.在此,我推荐大家一个很不错的编辑工

Ajax工作原理

在这篇文章中,我将从10个方面来对AJAX技术进行系统的讲解.  1.ajax技术的背景        不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行.而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用ajax,比如说

ajax和XMLHTTP原理

ajax|xml Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得请求数据.要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解. XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术.简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户.达到无刷新的效果. 所以我们

前端Ajax技术原理

ajax所包含的技术 大家都知道ajax并非一种新的技术,而是几种原有技术的结合体.它由下列技术组合而成. 1.使用CSS和XHTML来表示. 2. 使用DOM模型来交互和动态显示. 3.使用XMLHttpRequest来和服务器进行异步通信. 4.使用javascript来绑定和调用. 在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目