频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

全面理解COM+

来源:灰狐动力 作者:潘爱民 出处:巧巧读书 2005-12-05 进入讨论组
上一页 1 2 3 4 5 6 
  三.COM+应用开发

  在介绍了COM+的基本概念以及系统服务之后,第三部分我们讨论COM+应用开发的一些问题。首先我们讨论从COM转向COM+对于应用开发模式带来的变化,然后介绍基于属性的C++编程语言。

  1.应用开发支持

  COM规范的一个重要特征是它定义的COM接口与开发语言无关,因此我们可以在各种开发语言中实现COM对象或者使用COM对象,事实也确实如此。但是,我们可以发现,虽然COM与C++的二进制结构最为接近,但我们在C++语言中实现COM对象并不轻松,编写一个C++类与实现一个COM对象有很大的差别,即使使用了MFC或者ATL这样的类库或模板库,我们仍需要学习COM的一些底层知识,否则难以编写出正确无误的组件程序。

  用过Visual Basic 6.0的读者一定有这样的体会,在VB6中编写自动化(Automation)组件非常简单,只要按常规的方法编写“Class Module”即可实现COM组件。Vb6编译器承担了所有的底层细节处理任务,对于程序员而言只是一些“Class Module”。虽然这种开发模式限制了程序员的控制能力,但对于大多数情况,VB6不失为一个快速实现COM组件的开发环境。
 
  COM+推出之后,它的开发模式也将有一些转变,尤其对于Visual C++程序员,在编译时刻程序员可以在代码中使用一些说明性的语句来设置COM+组件的属性,比如CLSID、ProgID、线程模型以及双接口等,如果不指定这些属性,编译器将使用缺省值。以前我们为了使COM组件支持某些非缺省的特性,我们必须通过编写代码来实现这些特性,所以程序员一定要对各种特性了解得非常清楚才能够编写出正确的代码来,这也是实现COM组件的一个难点。COM+一方面与操作系统紧密结合,另一方面从开发的角度来讲,COM+将进一步与编译器结合,它将扩展C++的一些语法,使得我们可以在代码中描述COM+特性,然后由编译器直接提供这些特性的支持,从而减少程序员的工作量,提高COM+组件的生产效率。

  在代码中利用说明性的语句指示编译器产生与COM+组件有关的元数据(metadata),COM+运行系统将利用这些元数据管理COM+组件。从某种意义上讲,我们可以认为元数据是一些类型库信息,所以,实际上支持COM+组件的C++开发系统将把IDL/ODL的语法与C++语法结合起来。后面讲到基于属性的编程模型时我们将会看到这种情况。

  全面支持COM+组件的开发工具要等到Windows 2000发布之后,在Visual Studio的下一个版本中才可能实现。作为一种兼容的方案,在现在的Visual C++版本中,编译器仍然只支持原先的C++语法,当它在预处理过程中,碰到说明性的描述信息时,它把这些属性信息交给属性分析器去处理,属性分析器是一个编译扩展模块,它把属性信息转换成C++代码,然后送回编译器,编译器再把这些源代码编译到目标代码中。属性分析器产生的其他一些信息,比如类型信息,也被编入最终代码。编译器的结构如图10所示。

全面理解COM+
图10 COM+组件编译过程示意图

  2.基于属性的C++编程语言

  基于属性的编程模型将直接把COM+组件的属性信息写到C++源代码中,指导编译器产生COM+组件,这样可以使程序员不必编写底层的处理代码,因为这些代码对于几乎所有的组件都差不多,因此让开发工具直接产生这些代码可避免重复劳动。这种方式比MFC的宏以及ATL的模板类更为直接。

  属性并没有影响基本的C++语义,并且属性的语法也比较简单。属性可以用在任何说明性的语句前面,比如C++类的声明、变量的声明都可以在其前面用方括号指定其属性。需要注意的是,通常我们不在类型或者实例定义语句中指定属性信息。下面的代码说明了属性的用法:

[

uuid("346bf467-3467- d211-23c6-000000000000"),

helpstring("IMyInterface Interface"),

]

interface IMyInterface : IUnknown

{

HRESULT Func1 ( [in] long, [out,retval] long* );

HRESULT Func2 ( [in] long, [out,retval] long* );

};

[

coclass,

progid("MyComp.MyObj.1"),

uuid("346bf468-3467- d211-23c6-000000000000"),

helpstring("MyObj Class")

]

class CMyObj : public IMyInterface

{

public:

CMyObj ();

// IMyInterface

public:

HRESULT Func1 ( [in] long, [out,retval] long* );

HRESULT Func2 ( [in] long, [out,retval] long* );

……

};

  如果读者熟悉IDL或者ODL语法,那么对上面例子中的属性描述一定非常清楚。Visual C++的属性分析器分析属性关键字,并产生相应的C++源代码(实际上是ATL代码)。下表列出了属性分析器支持的一些常用属性关键字。

表1 常用属性关键字列表

属性关键字 说明
coclass 加入COM特性支持,产生相应的IDL文件。
dual 把一个接口标记为双接口,支持两种访问方式:vtable或者IDispatch。
emitidl 指示后续所有的属性信息都被写到IDL文件中。
id 指定自动化接口中方法的分发ID(DISPID)。
in/out 指定参数的传递方向。
progid 指定组件的ProgID。
retval 指示此参数为方法的返回值。
threading 指定组件的线程模型。
uuid 指定类、类型库或者接口的GUID标识。
module 指定组件程序的信息,包括程序类型、文件名、类型库GUID、版本等信息。

  基于属性的编程模型为Visual C++程序员开发COM+组件提供了捷径,它避免了MFC繁杂的宏定义和ATL晦涩的模板类。属性编程模型还包括其他一些语义或语法,比如事件定义、对象构造等,我们将可以在新版本的Visual C++或者COM+ SDK中看到这些变化。

  四.总结

  虽然COM+仍然以COM和MTS为底层基础,但是由于它定位的原因,所以COM+新增加的内容较多。与COM相比较,COM+与Windows操作系统结合得更为紧密,反过来,Windows操作系统也更加依赖于COM+;与MTS相比较,COM+更加适合于分布式应用的开发,它提供了许多大型分布式应用系统才可能用到的一些功能。从目前计算机硬件以及Windows操作系统的发展趋势来看,COM+有可能成为推动Windows 2000操作系统的一个重要技术支柱,同时COM+和Windows 2000联合起来使得企业应用直接进入分布式应用领域,这是我们目前已经可以感觉得到的一个发展方向。

  以下列出COM+的几个主要特性:

  (1) 真正的异步通讯。COM+底层提供了队列组件服务,这使客户和组件有可能在不同的时间点上协同工作,COM+应用无须增加代码就可以获得这样的特性。

  (2) 事件服务。新的事件机制使事件源和事件接收方实现事件功能更加灵活,利用系统服务简化了事件模型,避免了COM可连接对象机制的琐碎细节。

  (3) 可伸缩性。COM+的可伸缩性来源于多个方面,动态负载平衡以及内存数据库、对象池等系统服务都为COM+的可伸缩性提供了技术基础,COM+的可伸缩性原理上与多层结构的可伸缩特性一致。

  (4) 继承并发展了MTS的特性。从COM到MTS是一个概念上的飞跃,但实现上还欠成熟,COM+则完善并实现了MTS的许多概念和特性。

  (5) 可管理和可配置性。管理和配置是应用系统开发完成后的行为,在软件维护成本不断增加的今天,COM+应用将有助于软件厂商和用户减少这方面的投入。

  (6) 易于开发。COM+应用开发的复杂性和难易程度将决定COM+的成功与否,虽然COM+开发模型比以前的COM组件开发更为简化,但真正提高开发效率仍需要借助于一些优秀的开发工具。

  COM+标志着Microsoft的组件技术达到了一个新的高度,它不再局限于一台机器上的桌面系统,它把目标指向了更为广阔的企业内部网,甚至Internet国际互连网络。COM+与多层结构模型以及Windows操作系统为企业应用或Web应用提供了一套完整的解决方案。静态页面:http://www.qqread.com/vc/s502136200.html进入讨论组讨论。
上一页 1 2 3 4 5 6 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章