CSDN博客

img jiangtao
博客专家

介绍几本COM的书籍(韩少勇)(下)

发表于2001/1/15 18:55:00  3085人阅读

分类: 精彩书评

 

  介绍几本COM的书籍(下)

   韩少勇

 

美国人写书,喜欢把一些背景文化写进去,少勇非常赞赏。比如这本书中提到了“COM的生活方式”,着实让人眼睛一亮、精神为之一震。Don Box 是一位COM领域泰斗级的人物,在MSDN 中时常能见到他的大作,他所说的“COM的生活方式”实际上是在区别COM编程与传统的C++程序开发的不同以及在软件工程上的改变。

书中有如下评论:

“强烈建议你以IDL开始所有的编程工作,不要将IDL仅仅用于生成本地服务器的代理和占位模块。正象Don Box曾经说过的,‘真正的COM程序员用IDL开始工作’”。

虽然少勇对大师非常尊重,但还是认为此言过于绝对化和偏激了。因为Don Box所讲的实际上是一种理想化的软件开发方式,我们基本遇不到。按照Don Box的理论,如果我们开发一个工程,全部运用COM组件,那么在开始编程之前应该设计好所有的接口,由于接口的不变性,设计好之后就不应该改变了,因此也就应该从IDL开始所有的工作了。回到现实中来,我们的程序员在做一个产品的时候,一般都先构造一个程序框架,组件只是完成一些基本功能,不是工程的全部,于是大师的言论在此并不适合我们。

许多人认为,“在软件上,美国的今天就是我们的明天”,于是纷纷把美国人的发明、理论拿来当作圣经来读。但少勇说:“借鉴的同时还要有选择、有思考,看它是不是切实符合中国的国情。”

书的最后一章利用前面讲述的内容创建了一个真正的分布式应用的例子,建议读者仔细研读一下(包括本书中的其他程序),要勇于去吃螃蟹。否则就算少勇抹一抹嘴边的油,告诉您说螃蟹是何等的美味,可能信的人也不多。

强力推荐!COM的“宝典专著”---《COM原理与应用》

书名:《COM原理与应用》

作者:潘爱民

清华大学出版社 1999年11月第1版

定价:39.00元

 


    朴素无华的外表、平淡无奇的名字、几乎白送的价格是少勇对这本书的第一感觉。但翻开此书,简单地浏览之后,少勇顿时“心跳加速、浑身来电”,揉了揉眼睛,大有一种捡了金子的喜悦。于是一章一章细细品来,越看越起劲,越读越过瘾,不禁惊呼:“此书乃COM之宝典专著也”!

少勇认为,本书具有“系统性、严密性、深入性、实用性”四大特点。“系统性”是说此书所论述的知识涉及到了COM领域的各个方面,不仅全面、而且系统。看的出潘爱民先生的功底之深厚决非常人所能及,他不仅对COM有着深入的研究,而且对C++的理解也堪称炉火纯青(作者翻译了《Visual C++技术内幕》[第四版]),因此讲起来条理清晰、错落有致、自成体系,有如滔滔长江之水接海连天,使人心旷神怡、流连忘返。“严密性”是说书中的语句措辞颇为讲究,经得起推敲。有些地方初看似有不妥之嫌疑,但仔细一品,才发现其中的奥妙,只是自己以前没有理解得如此深刻而已。“深入性”是说此书并不是一本泛泛而谈的书,许多章节的论述都堪称精辟、给人以耳目一新的感觉,乃大师力作。由于作者的功力深厚,因此理论与实践的结合可谓“无缝”,因此“实用性”也是本书的一大特点。

全书分为三个部分,第一部分包括前五章,讲述COM的原理。少勇认为,如果几个秀才作同样题目的命题作文,很容易就能看出水平的高低来。关于如组件、接口、DLL以及跨进程调用等最基本的概念可能所有讲COM的书上都会讲,但深浅不一。在本书中,作者不仅讲述了基本理论,还对其进行了润色、加工,许多地方还作了总结,很有条理地向读者说个“一、二、三”。与现在很多人把英文资料拿来拼拼凑凑就可以“堆”出一本书相比,作者的做法实在难能可贵。

第四章讲述了客户程序创建COM对象的进程透明性。大家知道,不管是进程内组件还是进程外组件,客户程序可以用一致的方法创建COM对象。对于进程内组件,无论是创建过程,还是对接口函数的调用过程,我们都可以按照一般的同一进程内部函数调用的过程来理解组件和客户之间交互操作;但对于进程外组件,实际的情形要复杂的多,因为组件程序和客户程序拥有不同的进程空间,所以,它们之间所有的交互过程都涉及到进程之间的通信过程。

虽然客户程序和对象在不同的进程空间中,但所有对接口的调用都是间接进行的,客户程序调用接口成员函数就如调用本进程内的函数一样,这正是COM所达到的透明效果。

在这一节里,作者不仅介绍了组件进程和客户进程的内存模型,还对接口调用过程中的列集(marshaling)处理过程作了详细的论述,并且给出了实现自定义接口的标准列集程序的过程,最后还以例子说明了进程外组件自定义接口的实现过程。

少勇认为,这一部分的论述不光深入,而且极具条理性。以类厂对象的列集过程为例,书中有如下论述:

   “(1)、首先确定注册对象(即类厂对象)提供的代理对象的CLSID,如果注册对象不能提供代理对象的CLSID,则使用标准的列集代理对象。然后CoRegisterClassObject函数要求注册对象提供列集数据包,实际上是一个字节流,它包含了用于代理对象与组件对象的跨进程连接所必需的信息。如果注册对象不能提供这样的数据包,则使用COM提供的标准列集数据包。

   (2)、COM把代理对象的CLSID和列集数据包传输到客户进程中,CoGetClassObject函数正在等待这些数据。

   (3)、在客户进程中,COM根据传输过来的CLSID创建代理对象,并且把列集数据包传给代理对象。因为,列集数据包包含了代理对象与组件对象的连接信息,所以代理对象利用数据包建立与组件的连接。”

象这样总结性的论述几乎遍布了书的每一个章节。能作到这一点本以非常难得,但作者并没有就此收笔,他还详细介绍了IMarshal接口,并给出了自定义列集的实现。象这样的知识,您在其他书中恐怕找不到吧。

第五章,“用Visual C++开发COM应用”主要从两个方面进行了论述,一个是MFC,一个是ATL。由于作者在Visual C++方面的造诣,因此这一部分中对于MFC的论述可以称的上在同类书中首屈一指。我这么说是因为一般书籍在讲到这里时,对用MFC实现COM接口的机制往往都有所涉及,但大多论述不够,长久以来,少勇总有一种“走出餐馆却没有吃饱”的感觉,不免遗憾。但是这一点本书却做到了,通过对DECLARE_INTERFACE_MAP()、BEGIN_INTERFACE_MAP、END_INTERFACE_MAP、INTERFACE_PART、INIT_INTERFACE_PART等宏的深入剖析,使读者能对MFC如何实现COM接口、如何定义接口映射表有一个全面的认识。如果您需要用MFC来编写COM组件的话,相信一定会从受益非浅。接下来对于ATL的论述略显单薄,但所讲内容都是精华,具有较高的参考价值。少勇认为,在ATL日益受到重视的今天,市场上尚缺少一本系统讲述ATL的书籍,但不知哪位“大侠”有心情填补此缺。

书的第二部分是六到十章,讲述了COM规范中扩展的一些内容,包括可连接对象通信机制、结构化存储技术、COM对象的名字对象技术、统一传输机制以及DCOM。如果读者要全面理解COM,这部分内容为您提供了这些技术的细节。以前,很少有书能够如此系统地介绍这些技术,就算偶尔有书涉及一二,也都不很深入。而且这部分知识涉及到了COM应用中的许多实际问题,比如说OLE,虽然已经诞生很多年了,但大多数人对它还是一知半解、掌握得很不够。虽说从各种媒体上您可以找到许多资料,但把这些资料整理出来系统地讲述,并不多见。纵观这几章的论述,可以看出作者一定认真研究过COM体系结构以及OLE的许多内部资料和源码,并通过自己的加工把这些原本支离破碎而且难懂的材料做成了一顿“美味大餐”。“难得,难得,”少勇看完这几章,不禁赞不绝口,“集大成者也!”(实际上,这里的每一个话题少勇都有一大堆感想要与您分享,只可惜篇幅所限,只能把最精彩的部分拿出来介绍,欲知详情,还是买一本回家慢慢看吧。)

DCOM是不得不说的,它是COM从桌面环境走向分布式网络环境的必然。从COM逐渐过度到DCOM,这部分堪称“深入浅出”的典范,不仅详细介绍了DCOM的原理和特点、用户如何创建DCOM组件,还对连接管理、并发管理作了详细的论述。记得我在评《COM技术内幕》时讲过其最后几章不太令人满意吗?那么看潘爱民先生的书会弥补您的缺憾。

在第二部分,我的最后一个话题是关于安全性的,因为对于一个分布式系统来说,这太重要了。《COM原理与应用》在两个地方对安全性进行了论述,第一次是在第四章,提到了激活安全性和调用安全性。这里从COM特性的角度讲述了COM安全性,侧重于安全模型结构。第二次是在第十章,提到了访问安全性和激发安全性,侧重于DCOM在分布式环境下的安全模型的配置情况,强调实用性。到此,有些读者可能就会觉得这四个“安全性”混在一起,磕磕碰碰、搅搅拌拌、倒是一盘好菜,只可惜看不明白。少勇认为,这只是因为目前COM领域名词太多、叫法又十分混乱,Microsoft尚是如此,何况他人?因此,这对于写书的人来说,确实很难办。于是有些作者采取了回避的政策,讲激活安全性和调用安全性就不讲访问安全性和激发安全性,而如果要讲访问安全性和激发安全性则对激活安全性和调用安全性只字不提。这样虽然解了一时之困,但不利于读者建立一个完整的概念。《COM原理与应用》并没有回避困难,其“深入性”又一次得到了体现。看得出来,在写这部分的时候,作者也下了一番工夫,他以不同的角度对COM安全性作了有层次、有重点的论述,我认为其可贵之处有二:其一,COM的资料本十分难找,关于安全性的材料就更少了,能搜集到比较系统的资料实在不容易;其二,关于这部分知识以前基本没有权威性论述,全凭写书的人自己领悟,这就要求作者具有很好的功底和悟性,当然还得经过艰苦的努力。说实话,书的这部分少勇反反复复看了数遍,确实学会了很多知识。我的建议是,在阅读这部分时,切记要细致但不要钻牛角尖,否则可能一时半会儿真的就绕在里边出不来。还有,由于DCOM的安全性是建立在NT安全性基础之上的,很多地方涉及到了分布式系统的安全策略,因此您最好具有这方面的基础知识,如果没有,看不懂是很正常的事。

通过对本书的前两部分的学习,您已经对COM的基本原理和扩展部分有了一个比较全面的认识,就象盖房子,您已经打好了坚实的地基并垒起了围墙,实在可喜可贺!但这还很不够,因为我们学一项技术的目的就是如何来很好地用它。因此,就必须进行第三部分的学习,在这里您将学到既具有COM优点又实用的技术,作者将教您如何给房子盖上房顶。

书的第十一章讲述了自动化对象。自动化的概念最早出现在OLE2中,当时叫做OLE自动化。后来这个概念被COM所吸收,称为自动化。现在各式各样的Control中都引入了自动化的概念,WordExecl也支持自动化。事情往往就是这样,一个概念应用的越广就越难给其下一个恰到好处的定义。自动化便是这样,各种资料上形形色色的描述总是让人抓不住重点。《Inside COM》中关于自动化的论述也很不能让人满意,而COM原理与应用》算是弥补了这方面的缺憾。

我们知道,COM实质上是定义了一种客户与服务器的通信方式,而这种通信是通过接口来完成的。当我们用C++来写客户程序的时候,一切都是那么美好,通过CoCreateInstance和QueryInterface将得到一个接口指针,通过这个接口指针就可以调用相应的函数了。请注意,这一切都是通过指针来进行的。可是当我们用Visual Basic写客户程序时,情况就不那么美好了,原因只有一个:Visual Basic是弱类型编程语言,它对数据类型的描述能力非常有限。因此,我们必须提出一个让解释性语言也能够访问组件的方案,这个方案就被称之为自动化。一个自动化服务器实际上就是一个实现了IDispatch接口的COM组件,而一个自动化控制器则是一个通过IDispatch接口同自动化服务器进行通信的COM客户。

在本章中,作者对IDispatch接口和相关数据类型、Invoke函数的实现、双接口以及迟绑定和早绑定、自动化对象的编程都做了详细的论述并提供了很好的例子,是本书的又一闪光点。

第十二章讲述ActiveX控制,在本章中,作者不但详细论述了ActiveX控制的基本理论,还对如何在Internet环境下应用ActiveX控制作了深入讨论。因此,本章对于具有一些这方面基础知识的读者来说,是加深理解、迅速提高的不可多得的资料。由于作者为了节约篇幅,在这一部分作了一些删节,有的地方读起来可能会产生一定的跳跃感,不过无碍大局,因为目前介绍ActiveX基础的资料很多。由于作者对MFC很熟悉,这一章的例子仍然用MFC来编写并进行了深入的剖析,这对于C++的爱好者实为一个提高的好机会。

COM作为一种软件模型,不仅提供了程序与程序之间通信的标准,而且改变了传统的程序设计方法。因此,COM的主要贡献在于对程序设计方法的变革。书的第十三章讲述了基于COM的程序设计,在这一章里,作者对面向对象的程序设计方法作了一定分析并与组件化程序设计作了比较,进而讨论了MTS,并对多层应用软件结构和基于COM的Web应用作了一定介绍,使读者可以对组件化程序设计产生一个全面的认识。

虽然MTS出台已经有一段时间了,但是真正用的人还不多,许多探索仅仅停留在理论上,种种原因使MTS的优越性没有被广大的Windows程序员所认识。不过随着Windows2000的出台和COM+的发布,这种情况很快就会有所改变。COM+是COM、DCOM、MTS的集成,它通过操作系统的各种支持,把组件软件提升到应用层,而所有的底层细节留给了操作系统。书的最后一章介绍了COM+,对于大家开拓眼界、理解Windows2000所提供的服务具有非常重大的现实意义。

COM原理与应用》是潘爱民先生的力作,我认为其意义有二:其一,本书在前后的一致性和名词的把握上都很不错,读者得到的是“地道”的COM中文书籍,与翻译作品有显著的不同。其二,国内作家能写出如此深入(甚至超过了美国的作家)的作品,对我们来说,的确是一件令人欢欣鼓舞的事情,但愿在不久的将来,这样的书籍会越来越多。

当然,《COM原理与应用》并不是十全十美的,对于所涉及到的知识来说,有些部分的论述略显单薄,尤其缺乏对于书中例子的剖析,也许是作者考虑压缩篇幅的原因吧。少勇认为,不是所有的人都能消化“浓缩”后的知识。

 

通过以上论述,相信各位对这几本COM书籍已经有了一定的认识,大家可以根据自己的实际情况选择阅读。

新千年、新气象,少勇特书写了一幅对联,与大家共勉:

上联:新千年观日月辉映天地

下联:数万载论风流指点离骚

横批:志在今朝

 

0 0

我的热门文章

相关博文

img
取 消
img即使是一小步
也想与你分享
打开
img