2023年11月30日发(作者:)

OLE技术简介

Windows中,应用程序之间是相互联系的。然而,越来越多的程序提供一个OLE自动化接口,以

使其他的应用程序可以对他们进行操作。这样,我们可以使用Delphi,C++,Visual Basic等语言来

驱动OLE自动化服务器,而不必考虑用于编写他们的编程语言。OLE自动化的技术使得程序员能控

制其他应用程序或者dll中的对象,不仅仅能够使用驻留在自己程序里的对象,而且能使用驻留在

系统上的其他程序中的对象。特别是,拥护能够访问这些对象的属性和方法,而不是它们的原始数

据,而且,分布式OLE到来,已经能使程序员把这些功能扩展到了网络上。

OLE AutomationWindows应用程序之间相互操作的一个技巧。被操作的一段为Automation服务

器,典型的Automation服务器有Microsoft Office程序和Internet Explorer而操纵Automation

服务器的一端称为Automation控制器。一个程序可以兼具有服务器和控制器两种角色。Delphi 6

中,要创建Automation控制器(即Automation客户),有两种方式;一是引入Automation服务器

的类型库;二是OLEVariant类型的变量。

一. 创建OLE自动化对象

Delphi中,实现OLE自动化是非常简单的,无任何时,为了支持OLE自动化,Delphi提供了一

个简单的向导——功能很强的类型库编辑器。

当使用OLE自动化时,由于客户机与服务器是两个分别运行在相同地址空间中的独立应用程序。

因此,系统必须使用一种复杂的机制来进行对象方法调用。在OLE Automation中,客户机有两种基

本方法来调用服务器输出的“对象方法”:

要求执行“对象方法”与DLL动态调用的方法类似。当使用Variant调用OLE自动化服务器时,

就使用该方法。该技术的使用相对简单,但执行效率很底,而且提供的编译器类型监测也非常少。

在服务器上为对象输出Delphi接口定义,并只需分配一个数值就可以调用其“对象方法”。该

技术基于接口,允许编译器监测参数类型并生成执行速度更快的代码,但这无疑会增大程序员的工

作量。

在以上两种方法之间,最重要的区别在于第二种方法通常需要一个类型库,类型库

是类型信息的集合,该集合通常描述了可以有服务器使用的元素,包括对象,接口以及其他类型信

息。类型库是语言无关的。类型元素由OLE定义为编程语言标准元素的子集合,而且他们可以交付

给任何开发工具使用。

二. OLE对象的两种状态

Delphi 6中,可以分别在设计状态或运行状态创建对象,下表说明状态创建对象的

区别:

设计状态与运行状态OLE对象的创建

设计状态OLE对象的创建 运行状态OLE对象的创建

对象保存在运行文件中,增加了编译对象保存在单独的一个文件中,减少了编译程序的开

程序的开销

在设计时需要访问OLE服务器 在设计时不需要访问OLE服务器

OLE对象在设计或运行时均可以编辑 OLE对象只能在运行时可以编辑

应用程序的OLE对象数目在设计已应用程序可以在运行进程中创建新的OLE对象

经确定

设计时OLE对象已经创建,并减少运运行时OLE对象已经创建,并增加了运行时间

行时间

此外,在设计状态,OLE服务器不能被本地激活,只能在自己的窗体内激活。但在运行状态,

只要OLE服务器支持本地激活,就可以使用这种方式。

三. 对象链接与嵌入的比较

链接对象的数据保存在OLE服务器创建的文件中,嵌入对象的数据保存在OLE应用程序中。链接对

象必须文件以文件形式保存,只有对OLE服务器已经创建好的OLE对象,才能进行OLE链接,链接的

OLE对象文件可以被OLE应用程序和其他程序所修改,并且OLE服务器和其他OLE应用程序也可以

访问和修改OLE对象。同一个数据对象可以被多个应用程序访问。

Delphi中的应用程序可以得到OLE对象中的最新数据。OLE对象数据应用程序修改时,这些变化

将在所有包含该对象的其他应用程序中体现出来,如下表所示:

使用链接与嵌入的原则

何时使用链接 何时使用嵌人

对源对象进行修改及将这些修改反对源对象进行修改及将这些修改反

映到其他与源对象进行链接的应用映到某一特定的应用程序或文本中

程序或文本中

源对象可以被多个OLE应用程序多源对象不能被多个OLE应用程序进

次修改 行多次修改

源对象的文件不会被频繁的移动,源对象的文件会被频繁的移动,但

不会被删除 不会被删除

对象很大,一般通过网络或电子邮件对象无任大小都无法通过网络或电

进行分配 子邮件分配

嵌入对象保存在OLE应用程序中,其他应用程序不能访问该对象。只有在OLE应用程序中

激活OLE对象才能对其进行编辑。嵌人的OLE对象不需要保存在文件中,所有数据都在应用程序中,

这就确保了OLE数据不会被偶然地删除或修改。当然,用户如果想要保存对嵌人对象的修改,可以

OLE数据存入某个文件中。

五.OLE服务器与容器

OLE文件是一种允许不同的文件在一起协同工作,并且共享数据的方法,它有客

户和服务器之分,能够提供OLE文件服务的应用程序称为服务器;能够容纳来自与其他应用程序数

据称为客户,即OLE容器,是指请求数据或者操纵其他应用程序的程序。在Delphi 6中,OLE容器

是通过TOLEContainer控件来实现。TOLEContainer控件支持OLE2和活动文件

六.OLE1OLE2的区别

OLE1OLE2是有很大区别。OLE2服务器采用本地激活方式,这意味着服务器菜

单与应用程序菜单要进行融合,服务器的状态栏会更换应用程序的状态栏,服务器的工具栏会更换

应用程序的工具栏。OLE对象在应用程序窗体中进行编辑,但所有过程都交给服务器进行处理,而

OLE1则不具有上述特点。因为在OLE1服务器中激活OLE对象时,服务器程序在前台打开自己的窗

体,并获得焦点。OLE窗体失去焦点,存在与单独的窗体之中。

七.OLE技术在Delphi平台下导出数据到Word中的应用

Delphi 6 提供了一组组件,以实现与Office组件的集成,该组件称为Severs

件组。

Severs部件组主要用来实现Office 2000 中的 Word 2000,Excel 2000,PowerPoint

2000,Access 2000等应用程序的集成。这些应用程序作为COM服务器来使用。对应的Word部件有:

WordDocument:建立Word文件对象

WordApplication: 启动Word并建立同Word的连接。

WordFont:设置Word文件的字体

WordParagraphFormat:设置Word文件中的段落格式