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

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

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

发表时间:2007-9-17  特约撰稿人: 张浩 白二平 来源:e-works
支持COM自动化调用的成熟软件产品不外乎有两类,一类是在COM规范形成后开发出来的产品,另一类是在COM规范形成前就已经成熟的产品。作者邮箱:bullzhanghao@yahoo.com.cn 如有疑问,可直接与作者联系!

4.3 COM自动化调用

支持COM自动化调用的成熟软件产品不外乎有两类,一类是在COM规范形成后开发出来的产品,在产品的研发阶段,采用了微软的COM组件技术,其自身就是基于COM技术的产品,因此其从诞生之日起就自然支持COM自动化调用;另一类是在COM规范形成前就已经成熟的产品,其支持COM自动化调用的主要目的就是为了在Windows平台上提供给其它软件系统对其系统内部进行访问的能力,同时在COM组件内封装了软件系统业务逻辑规则以及提供了严格的登陆和访问控制,保证了软件系统完整性。

这里假设已经存在一个软件系统SystemDemo,我们将开发一个专门的COM自动化组件,提供第三方系统进行内部数据的访问和操作,COM自动化组件中包含了登陆验证和访问控制验证,同时在ClientBasic中进行调用。例子的结构如图8-23所示(其中灰色的部分为我们要创建的自动化组件)。

图8-23 示例的逻辑流程

首先,介绍COM自动化组件的开发过程,组件开发工具采用的是Microsoft Visual C++进行,选择VC的主要目的是为了表明不同的开发工具产生的组件之间可以通过COM规范实现相互的操作,从而实现开发工具的有效利用;当然我们也可以使用Delphi,这主要是开发人员的自己选择,微软提供了ATL和MFC两类进行COM组件开发的类库,在示例中,我们采用了MFC。

下面我们将创建COM自动化组件,SystemAccessUtil.dll,在VC6中选择新建工程项目,弹出如图8-24所示对话框。

图8-24 创建SystemAccessUtil组件

我们选择的工程类型为MFC AppWizard(dll)。

图8-25 自动化工程创建

说明,图8-25中的画圈的部分必须选中,这样在工程中VC会自动产生自动化程序所需要的一些基础声明、类库和类结构,如图8-26所示。

图8-26 SystemAccessUtil工程的基本类结构

说明,针对于COM规范的DLL导出函数而言,MFC的生成帮助里面少了一个函数(DllUnregisterServer),其不影响组件的使用,但是影响组件的部署,我们可以手工添加,在这里就不再赘述。

图8-27 创建COM自动化类

说明,在“Class Wizard”对话框中选中“Automatiton”页,添加一个新类。

图8-28 自动化类的定义

说明,其中的“Base Class”选项必须选择CCmdTarget类,其中预定义和实现了很多自动化类所需要的基础定义和实现。“Automation”选项中请选择Createable by typeID,其定义了COM类的ProgID,其中的值为:SystemAccessUtil.UserInfoAccess,下面的脚本中使用到了这个字符串。

图8-29 创建CheckUserInfo函数

说明,其中的External name即为自动化对象提供的方法名称,在下面的Parameter List中定义函数的参数,关于ClientBasic和自动化组件的变量传递在下一节进行介绍。

图8-30 CheckUserInfo函数内容

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

责任编辑:王阳
2