OLE、OCX和ActiveX控件之间的比较

OLE/ActiveX/COM技术是MS的核心应用技术,只有彻底洞察其理论精髓,才能以不变应万变。
我们首先从OLE谈起。  
OLE(Object Linking and Embedding,对象连接与嵌入)
一、过去的OLE和今天的OLE
最初的OLE含义是指在程序之间链接和嵌入对象数据,它提供了建立混合文档的手段(资深Windows 3.X 用户可能记得当初在Word6.0中插入一个图形的新奇和喜悦),使得那些没有太多专业知识的用户能够很容易地协调多个应用程序完成混合文档的建立。1991年制定的OLE1.0规范主要解决多个应用程序之间的通信和消息传递问题,微软希望第三方开发商能够遵守这个规范,以使在当时的Windows平台上的应用程序能够相互协调工作,更大的提高工作效率。然而事与愿违,只有很少的软件开发商支持它。为此,微软于1993年发布了新的规范——OLE2.0,它在原有的基础上完善并增强了以下各方面的性能:   
1.OLE自动化:一个程序有计划地控制另一个程序的能力。
2.OLE控件:小型的组件程序,可嵌入到另外的程序,提供自己的专有功能。
3.OLE文档:完善了早期的混合文档功能,不仅支持简单链接和嵌入,还支持在位激活、拖放等功能。
OLE应用及相关名词
容器:
容器是一个客户程序,它具有申请并使用其它COM组件通过接口为其它程序实现的功能;
服务器:
服务器通过特定的接口将自己完成的一些功能,提供给使用自己的应用程序(例如画笔程序是一个文档服务器,它提供创建并编辑BMP 图像的功能)。当打开Word,选择【插入】菜单下的【对象...】项,您可以看到在您的系统中存在哪些文档服务器,此时的Word以文档容器的身份出现。
在位激活:
当您双击插入的对象后发现Word的菜单有些改变成文档服务器程序的菜单,可以在当前的环境下编辑对象,这称为在位激活。
自动化:
和OLE文档技术类似,允许一个应用程序通过编程控制另一个应用程序“自愿”提供的功能的技术称为OLE自动化。自身暴露一些可编程对象给其它程序的应用程序叫自动化服务器,利用并操纵自动化服务器提供的功能的应用程序叫自动化客户或自动化控制器,有些程序既是自动化服务器又是自动化控制器。例如在VC中我们可以通过编程创建并编辑一个Excel工作表(很多参考书都以此为例),这里的VC就是自动化控制器,而创建工作表的Excel程序则是自动化服务器,但在Excel中我们又可以利用VBA语言创建PowerPoint的幻灯片,它又成了自动化控制器。利用OLE自动化技术可以实现软件的一次开发和多次利用,这也是集成组件的关键技术。无论是操作系统还是应用软件,微软都有意识朝着这个方向发展,例如从Windows95开始,包括WindowsNT4.0以后的操作系统的Shell就实现了OLE自动化技术。
OLE控件的宗旨是什么?
OLE控件的思想在于:开发出即插即用的可重复利用的代码,使第三方用户开发的控件很容易在自己的开发环境中得到应用。它的实质就是,用现有构件(控件)构造程序,即构件式软件。
什么是COM?
为了提供使对象能够与主应用程序通信的一种标准,微软原来引入了对象链接和嵌入(OLE)。原来规范的目标是提供一种途径,使应用程序,如Excel能够将电子表格嵌入到其他支持OLE标准的应用程序中。那时,人们认识到,OLE支持一种技术的基础,这种技术使得能够共享类属的对象,即组件对象模型(COM)。这种概念用于为OCX组件创建一种组件规范。这将我们带到了当前的标准ActiveX和ActiveX控件,OLE和OCX的发展最终形成了COM的顶尖产物。
可以将COM看作是在两块代码之间共享组件的二进制标准。COM根据对象可以完成的功能使得对象实现抽象化。对象可以完成的功能在其接口部分描述。接口就是对象可以实现的一组在逻辑上相关功能的访问方法。每个对象都拥有一个唯一的类ID(CLSID),它使用任意的一组接口。所有类必须具有IUNKNOWN接口,这个接口又可以被用于访问这个类支持的任何接口。这是一种功能强大的对象模型,因为它使应用程序能够在运行过程中确定任意一个对象是否可以完成某一项任务。
COM对象是通过几个方法来实现的。可以将COM对象编译成DLL或OCX,它们可以与调用应用程序在相同的进程空间中运行。COM对象还可以象编译过的可执行文件一样在它自己的进程空间中运行。利用分布式COM(DCOM),对象可以运行在不同的机器上,即可以运行在世界的任何位置。尽管COM对象的实现代码可能处于不同的进程中或不同的机器上,但COM对象系统服务去除了调用COM对象的复杂性。ActiveX组件是COM对象,这些对象实现了一套基本的接口,使组件能够被嵌入到可以主控ActiveX组件的应用程序中去。
COM规范
COM规范被公认为是微软对Windows系统的未来支持和发展策略,是微软的关于全球兴起的组件市场的策略。该规范提供关于新OLE技术的编程模型和二进制标准,但并没有规定实现COM规范的计算机语言(实际上只要支持指针概念的计算机语言就可以用于开发基于COM的程序),也没有指定应用程序应该如何组织,它只是一个指导性规范。
如今的OLE 之所以吸引大家我想很大程度上是由于COM规范的制订,它能够保证所有遵循此规范的应用程序之间的通信和消息传递乃至功能调用的安全和顺利实现。所有OLE的实现都是基于 COM 的,有人说COM是OLE的基石。OLE组件通过称为接口的一组相关函数集来支持对OLE对象的数据的访问,而接口的每一个函数称为方法(Method),通过接口可被访问的对象的数据称为属性。如果您熟悉VB,想必这些您一听就明白。注意这里的对象也不能和C++语言的类的实例对象相混淆。 实现了不同接口的文档应用程序在OLE中的称呼不一样,有的称为文档容器,有的称为文档服务器,有的应用程序既是容器又是服务器,著名的例子是微软的世界级Office软件Word。容器是一个客户程序,它具有申请并使用其它COM组件通过接口为其它程序实现的功能;服务器通过特定的接口将自己完成的一些功能,提供给使用自己的应用程序(例如画笔程序是一个文档服务器,它提供创建并编辑BMP 图像的功能)。当打开Word,选择【插入】菜单下的【对象...】项,您可以看到在您的系统中存在哪些文档服务器,此时的Word以文档容器的身份出现。当您双击插入的对象后发现Word的菜单有些改变成文档服务器程序的菜单,可以在当前的环境下编辑对象,这称为在位激活。 和OLE文档技术类似,允许一个应用程序通过编程控制另一个应用程序“自愿”提供的功能的技术称为OLE自动化。自身暴露一些可编程对象给其它程序的应用程序叫自动化服务器,利用并操纵自动化服务器提供的功能的应用程序叫自动化客户或自动化控制器,有些程序既是自动化服务器又是自动化控制器。例如在VB中我们可以通过编程创建并编辑一个Excel工作表(很多参考书都以此为例),这里的VB就是自动化控制器,而创建工作表的Excel程序则是自动化服务器,但在Excel中我们又可以利用VBA语言创建PowerPoint的幻灯片,它又成了自动化控制器。利用OLE自动化技术可以实现软件的一次开发和多次利用,这也是集成组件的关键技术。无论是操作系统还是应用软件,微软都有意识朝着这个方向发展,例如从Windows95开始,包括WindowsNT4.0以后的操作系统的Shell就实现了OLE自动化技术。
OLE与COM的关系是什么?
组件对象模型COM(Component Object Model)是OLE的心脏,它不但提供了一个实现OLE的框架,还为一整类新软件提出了一种全新的设计思想。它是一种面向对象的结构,定义了一套对象间相互通信的标准方式,规定了如何使一些小的、定义良好的软件模块在系统中共存并充分地相互作用。依照这种结构,可以将若干元件组合起来,以建立更大的和更复杂的系统。
OCX(对象类别扩充组件)
如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如你可以在VB中嵌入用VC开发的控件。
控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX的格式出现的,后来变成了.OCX。由于Internet的广泛流行,微软公司推出了ActiveX技术,就是从OLE发展起来的,加入了WWW上的功能。所以目前最流行的是ActiveX控件。
OCX通俗的叫法是什么?
对象嵌入,我们平常所说的窗口套窗口就是对象嵌入的一种。
OCX组件的来历是怎样的?
一般的开发工具都会提供一些标准控件,但不管标准控件多么强大、多么完善,都不能完全满足用户的需要。所以易语言就提供一个接口,允许用户编写自己的控件插入到易语言中使用。用户编写自己的控件在使用方法上同标准控件是相同。按照易语言的接口标准编写的控件就是OCX。由于使用OCX可以节省开发软件的时间,所以现在几乎所有开发工具都允许用户使用OCX来增强其功能。后来随着Internet的流行,微软又让网页中可以嵌入OCX,并称其为ActiveX控件。目前可以编写OCX的工具包括VB、VC、Delphi。易语言也即将支持OCX。
ActiveX控件
ActiveX控件是可重用的软件组件。使用它可以很快地在网址、台式应用程序、以及开发工具中加入特殊的功能。ActiveX控件的使用者可以无需知道这些组件是如何开发的,便可以完成网页或应用程序的设计。
对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序。OCX提供操作滚动条移动和视窗恢复尺寸的功能。如果你有Windows系统,你会发现在你的Windows地址录里有大量OCX文件名后缀的文件。 对象链接和嵌入(OLE)被设计来支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。OLE和组件对象模型(COM继OLE后的更常用的概念)支持“即插即用”程序的发展,“即插即用”程序在系统中可以用任何语言写入并可以由任何应用程序动态地使用。这些程序被认为是他们在其上运行的container的组建和应用程序。这种基于组件的近似应用程序的发展缩减了程序调试时间并改善了程序的性能和品质。Windows应用发展程序(比如powerbuilder和Microsoft Access)具有OCX的优势。
什么是ActiveX插件(控件)?
根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。
ActiveX(COM)技术是一种嵌入式程序技术,它其实就是OLE和 OCX的融合。 ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使得软件部件在网络环境中进行交互的技术。 它与具体的编程语言无关。作为针对Internet应用开发的技术 ,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。在Applet中可以使用ActiveX技术 ,如直接嵌入 ActiveX控制,或者以ActiveX技术为桥梁,将其它开发商提供的多种语言的程 序对象集成到Java中。与Java的字节码技术相比,ActiveX提供了“代码签名 ”(Code Signing)技术保证其安全性。
ActiveX是Microsoft的元素软件标准。简单地说,ActiveX技术是一种共享程序数据和功能的技术。它由微软提出并大力推广,并已成为事实上的标准。
ActiveX技术是Microsoft对OLE技术的更新和发展,Microsoft公司为了适应网络的高速发展把它的OLE技术和OCX技术融为一体并加以改进形成联合标准,改进之后赋予新名字ActiveX。也就是说,ActiveX中涵盖了OLE的所有技术和功能,同时又具有许多新的特性,以适应网络发展的需要。
ActiveX指的是一组包括控件、DLL和ActiveX文档的组件,它通常以动态链接库的形式存在,其设计思想是将一个程序(比如Flash动画)嵌入到另一个程序中(这个程序通常被称做容器,比如Authorware、Delphi、VB、VC、Internet Explorer等)。借助这种技术使得用户在一个程序中所创建的信息可以被集成到其它程序所产生的文档中。.这样就可使它(如Flash动画)可以随意地应用到各种场合。
ActiveX控件的数据输入和函数功能执行都必须通过容器,因此ActiveX控件和容器之间必须有一些特定的接口协议。ActiveX控件必须具备如下的性能机制:
属性和方法:ActiveX控件必须提供属性的名称、方法的名称及参数,通过这项机制,容器可以存取和改变ActiveX控件的属性参数。
事件:ActiveX控件由这项机制通知容器在ActiveX控件中发生的事件,比如属性参数的改变,用户按下鼠标左键等。
虽然在本质上ActiveX和OLE是同一种技术(实现不同程序的数据和功能的共享),但其目的有所差别。ActiveX的目的主要是共享程序模块之间的计算功能,生成一些专门的可以嵌入其他程序中的“小程序”,例如Microsoft web浏览器控件可以使得别的应用程序能够浏览(仅仅是浏览而不是创建)Web网页。
ActiveX控件是一个模块化的灵活对象,如果某个应用程序或网页需要增加一项特殊的功能,则无须重写整个程序,只要灵活地插入一个具有此项功能的ActiveX控件即可实现,ActiveX的优势还在于它的动态可交互性,用户可以动态地在使用过程中,通过改变它的属性和参数,在应用程序中实现自己的特殊要求。
ActiveX的来历是怎样的?
ActiveX的演变最早可以回溯到早期的剪切和粘贴以及后来的OLE(Object Link and Ember——对象的链接与嵌入)技术。实质上,ActiveX已经不仅仅是一个技术上的问题,而是微软的整个Internet战略的中心环节。微软把它的OLE和OCX技术融为一体并加以改进,将所形成的联合标准命名为ActiveX。ActiveX把控件规范得更加精练,使得这些控件更加小巧而且效率更高,同时加强了其接口对数据和特性的管理。ActiveX可以帮助应用程序开发者、Web网页制作者建立动态的Internet工具、网页和站点。
实际上可以将Microsoft提供的ActiveX控件看成是一个小的应用程序库。这些小程序对外提供接口,可以编写脚本语言(如用Vbscript等语言编写)并对其进行控制,这样就能使网页更加生动。
ActiveX与OCX控件
就绝大多数情况来说,ActiveX控件和 OCX 控件是完全可以互换的。可以看到与Internet风马牛不相及的ActiveX控件广告,仔细一看,就会发现,在不久以前,这些控件大概还出现在OCX控件列表中。当然,你要仔细观察这些控件。即使ActiveX控件与OCX 控件确实共享了同一继承,ActiveX控件与OCX控件也不完全是一回事。请记住,ActiveX 控件是能够在Internet上工作的。
Internet对程序设计环境带来了一些特殊的挑战。你不再能够奢求高速装入,OCX 在因特网环境中使用时,其规模成了一个严重的问题,下载一个60KB的OCX 就对用户的耐心带来了考验,而试图下载一个200KB的OCX 大概会导致用户中断下载。而ActiveX 控件是OCX的小型版本。
注 OCX和ActiveX控件的一个主要差别是ActiveX控件通常要小一些(轻一些)。
ActiveX控件也在受到各种机器专用需求的牵制。在机器上安装OCX时,安装程序能对机器进行检测并作出所需的许可。对ActiveX控件却不能这样要求。在这里你不能对客户机作任何假定,客户机可以是新的奔腾,也许是昨日的80386。(如果你的ActiveX控件确存在某种平台限制,那么,要么设法解决它,要么肯定每个使用它的人都清楚这一限制。)
你还需要应付OCX程序员从未想到的情况。比如,如果浏览器根本不支持ActiveX时会发生什么?目前处理这一问题的方法是,浏览器对那些不知作如何处理的HTML 标记只是简单地忽略掉。在这种情况下很容易应付一个与ActiveX不兼容的浏览器──只需打出一条消息,让用户知道他们的浏览器不能在当前页工作并指导用户换一个浏览器就可以了。
控件与DLL的关系是什么?
组件的前身是动态链接库(DLL),DLL使我们能够用一种语言开发一个可以用于任何其他语言的过程库。DLL的另一个强大的功能是在运行期间被加载的,这使得我们能够将开发任务划分为一个个组件而不必开发并静态链接一个大型应用程序。
ActiveX
ActiveX是OCX 的高级形式(也许把它看作OLE的较简单形式更合适)。但是,这个简单定义不能表达ActiveX控件的实质,用户认为ActiveX 就是 OLE 。对程序员来说,ActiveX 还是一套用于Internet的实能技术。它提供了过去没有的一种信息交换方法。
注释
Microsoft 目前正在开发一种新的Internet专用的组件技术,称为COM+ 。尽管许多内部网使用了ActiveX,而且ActiveX依然将用作应用程序组件,但ActiveX从未在Internet上广泛被采用过。ActiveX 在Internet上失败的理由有三条:组件大小,安全考虑以及缺乏对非Microsoft浏览器的兼容性。请谨记,你或许应该考虑把ActiveX控件作为公司内部使用的解决方案,而不是做为Internet的实现技术。
作为真正欣赏ActiveX的程序员,就不得不从程序员的角度去看一下OLE,这就是意味着要看一下OCX。从用户的角度看,OCX所做的都是在两个应用程序(或操作系统与一个应用程序)之间交换数据。OCX比数据交换的内涵要丰富得多。它们包括着一种称之为组件对象模型(COM)的概念。COM是定义对象模块间标准二进制接口的规范。这个接口定义了函数调用方法、基于标准结构的数据传送技术以及几个标准的函数调用。使用COM 意味着,你写应用程序模块(如OCX)时使用何种语言都无关紧要,因为模块接口在二进制层次上是相同的。

此条目发表在other分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据