您所在的位置:e-works首页 > 产品创新数字化(PLM) > EDA

<连载>Protel二次开发从入门到精通

--正文篇——第八章第4节

发表时间:2007-9-16  特约撰稿人: 张浩 白二平 来源:e-works
COM技术是目前Windows 平台上最常用的组件技术,COM是一种二进制的标准,它不但确定了对象的创建和销毁,更重要的是规定了不同对象间进行相互操作的规范。作者邮箱:bullzhanghao@yahoo.com.cn 如有疑问,可直接与作者联系!

4. ClientBasic与COM组件

首先介绍一些COM的基本知识。

COM技术是目前Windows 平台上最常用的组件技术,COM是一种二进制的标准,它不但确定了对象的创建和销毁,更重要的是规定了不同对象间进行相互操作的规范。凡是符合COM规范的应用程序或者提供了COM访问接口的应用程序之间都可以相互操作,其可以是进程间操作(包括跨机器的操作),也可以是进程内操作。凡是提供了COM访问能力的应用程序我们通称为COM组件。前面开发的Plug In Server也是一种组件化技术,但是它并不符合COM规范,因此不能称其为COM组件。在Windows平台上,COM组件的载体可以是EXE程序,也可以是DLL程序或者OCX控件。

提到COM技术,就必须要提到另外一种技术OLE,OLE技术是指对象的链接和嵌入,其主要是解决基于Windows的独立应用程序之间的相互使用问题。最常见的就是Office套间中的Word/Excel/Visio之间的相互调用和编辑。OLE不同应用程序之间相互调用的规范也符合COM规范。OLE规范成为了Windows平台上不同应用程序相互复用的一种标准。现在很多应用程序均支持OLE规范,因此可以在Word中插入由不同应用程序创建的对象。OLE应用程序提供的访问接口符合OLE规范,而OLE规范本身也符合COM规范,因此,也可以认为OLE应用程序是一种COM组件。虽然实现OLE规范的载体可以是EXE应用程序,也可以是DLL程序,但是目前大多数的符合OLE规范的应用都是EXE应用程序。

在COM(OLE)中,规定了一类特殊的接口规范—自动化接口规范(Automation),实现了自动化接口规范的组件,我们称之为自动化对象(COM/OLE Automation),目前大部分脚本(包括ClientBasic)均支持对于自动化对象的访问,包括OLE Automation和COM Automation。目前大部分的OLE应用都提供了符合Automation规范的对象,同时大部分的组件化的商业系统程序,均提供了支持符合Automation规范的COM访问接口。通过访问Automation对象,Client Basic可以操作OLE应用/组件化商业系统中的数据。

因此,对于COM组件的调用,我们将主要以OLE Automation对象调用和COM Automation对象调用为主进行介绍,对于OCX的调用,在这里不作主要的介绍。

在COM组件的实现中,COM类实现了Automation接口规范,COM类确定了COM对象应该包含的数据类型、函数等等。COM对象作为COM类的一个实例,其中保存了针对于某个具体实例的数据,COM对象的有效性是和它的生命周期相关的。在实际的系统中,COM类是全局有效的,因此就存在一个标识的问题,我们如何去识别一个全局有效的COM类呢?微软提供了两种方式,在创建COM类的时候,提供CLSID属性,并保存了给COM类分配的GUID(不同的开发工具,其产生的方式不同,不过一般为自动生成),来唯一性的标识这个COM类;二是为了开发使用方便,同时提供了ProgID属性(需要创建的时候手工输入),在ProgID中我们可以输入一些有意义的字符串来标识这个COM类,例如,ADODB.CONNECTION.1或Word.Document,ProgID一般包括三段,最后一个数字表示版本号;具体信息如下图所示。

图8-14 OLE对象的标识信息

这些信息均保存在操作系统的注册表中,因此我们可以通过ProgID进行COM组件的创建、访问和调用,而不必要去记忆CLSID。

4.1 自动化对象及常用命令

自动化对象就是符合COM Automation规范的COM类的实例,其也是COM对象,使用自动化对象,我们可以通过程序访问应用中的数据,例如我们可以通过ClientBasic进行应用的访问。在某些情况下,建立自动化对象的目的也许仅仅是为了其它外部应用能够访问应用的数据和函数,因为这样做对于用户而言是很有意义的。在自动化对象中将导出的信息分为两类,属性和方法。方法是成员函数,表示在自动化对象上执行一个动作,例如,一个Document对象可以提供一个Save方法;属性是成员函数对,主要是设置和访问对象的状态,例如,一个Drawing对象可以有一个风格属性,因而,有读取和设置网络属性的函数。目前在Windows平台上,使用最广泛的自动化对象莫过于微软的Office应用,包括Word/Excel等等,通过多年的应用,它们已经形成了非常好的自动化对象的结构,包括自动对象的层次以及相关的方法属性。下面简单介绍微软建议的对象层次以及相关的方法、属性(以Word为例进行说明)。

Word的自动化对象结构如图8-15所示。

图8-15 Word对象结构

在微软的建议中,根对象一般为Application对象。

为了提供对于同类多个对象的集中管理,在对象模型中提供了集合对象,例如图8-15中的Documents(圆圈圈起来的部份),表示在当前的Word程序打开的所有的Word文档的集合,集合对象提供了遍历和访问其中元素的方法和属性。

Application对象的方法和属性(以与Document相关的方法和属性为例说明),如图8-16所示。

图8-16 Application 对象相关的方法和属性

说明,在Application对象中通过Documents属性返回Documents集合对象,通过ActiveDocument返回当前激活的文档,通过Application,我们可以控制Word应用程序的公共数据的处理,例如,界面可见性控制、插件管理控制、任务面板控制等等内容。

微软建议MDI的Windows工具类应用程序采用集合对象。

Documents集合对象对象的方法和属性如图8-17所示。

图8-17 Documents集合对象相关的方法和属性

说明,在Documents集合对象中提供了遍历各个对象的方法和属性,同时提供了增加新元素到集合中的方法,Documents集合对象的方法和属性适用于所有的集合对象。

在Word中,Documenet对象对应一个实际的打开文档。

Document对象的方法和属性如图8-18所示.

图8-18 Document对象的方法和属性

本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。

责任编辑:王阳
3