介绍几本COM的书籍 -- 想要学COM无从入手的朋友必看[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 silver 的 blog

         介绍几本com的书籍
                    
韩少勇
      最有效的获取知识的途径就是读书,当然要读好书。难怪古人把求学也称作“念书”。
引言
实际上,写一些介绍电脑图书的文章是我长久以来的愿望。一方面由于我的朋友们经常让我为他们推荐一些切实有用的书,另一方面的原因是我在早些时候的学习并不很顺利,面对书店里鱼龙混杂的“繁华”,真是不知所措。结果横下心来,只要觉得差不多,就买!结果买了很多本不必买的书,浪费了钱财、浪费了时间。数年下来,倒也对电脑图书市场有了一些看法,产生了一些感慨。
大多数世人都不是圣贤,因此往往听得赞美,对批评却很难接受。我的许多朋友担心我的安全,劝我多说好话。可是书有好有劣,说假话当然有违初衷,说真话又难免得罪人。于是我们共商了一个“安全政策”:以“扬善”为主,在详细地介绍了一本好书之后就算提了几点不足,我想作者和出版社还是会接受的吧。至于一些不负责任的出版,我只说现象,不提名字。(请大家理解,浮生在世,安全第一、安全第一。)
    目前it行业竞争激烈,市场风云变换莫测,为了生存,所有人都超负荷地承受着各方面的压力。当程序员或者经理们好不容易从一大堆烦琐的事务中探出头来,拿起一本向往已久的专业书籍来充实自己的时候,他们当然希望尽快的把书上的东西转化为自己的思想,从而利用这宝贵而短暂的缓冲期学到更多的东西。
但可惜的是有些书却不是为了这个目的来写的,书上的话象文言文一样难懂(也许有些作者觉得只有这样才能显示出他的水平深不可测,也许有些作者压根儿就没有理解所讲的内容,只好用一大堆云山雾绕的语言来“遮羞”)。不仅如此,还有更可怕的现象,当电脑图书开始呈现出强劲的销售势头的时候,无数的“专家”、“大师”就在一夜之间涌现了出来,各种名字“大气磅礴”的书籍、培训让人目不暇接,就象大街上穿梭不息的出租车一样多。且不说他们的水平究竟如何,我想,“多必滥”似乎是一个曾被验证了许多次的道理。我就在北京某大学的布告栏里看到了“intermet培训”的宣传,实在让人哭笑不得。
现在,形形色色的电脑培训班已经成为了“it文化的一大风景”。对于这种现象,外国人的评论似乎更能发人深省:“在美国,是没有这么多培训班的,但是一个小学生都可以熟练地操作电脑。”“在中国,电脑培训班到处都是,但计算机技术的普及却仍然是一个问题。”“中国的自行车很多,男女老幼都会骑,但是你见到过自行车培训班吗?如果到处都是自行车培训班,在不厌其烦地教你‘自行车的轮子直径多长、有多少根辐条’等等问题,那么相信会骑自行车的人会越来越少。”写书或者译书也是如此,电脑图书的空前繁荣是否表示我们的水平很高呢?我认为不然。有时为了解决个别问题去书店找找资料,结果往往是浪费了时间还徒留“天下文章一大抄”的感慨。题材和形式都很雷同的书籍的大量充斥市场,我称之为“爆米花现象”。典故是这样的:前些年,我家门前的大街上来了一家爆米花的,因为独此一家,所以生意红红火火。可是没过多久,又雨后春笋般地涌现了十几家,沿着大街一字排开,煞是壮观。现在大家的生意均不太好,但谁都没有意见,只是我家常年“米花飘香”。如果说中国人“跟风”的脾性是祖宗传下来的,因循守旧者把它奉若神明的话,我们的电脑作者们是否应该具有一些开创精神,静下心来想一想,市场上究竟缺些什么书,不要一味地“人云亦云”。
虽然好为人师者比比皆是,但是老师却不是那么好当的,因为你得对所讲述的知识有深刻的理解,并能够用深入浅出的语言来讲给别人听。态度当然是第一位的,但是书的神圣却被不少作者和出版社践踏着。一些出版社不顾质量,一味求出书快,结果商机有了,却倒了牌子。一本原先很不错的英文书被他们翻译得驴头不对马嘴,根本不能看。而由于版权卖给了他们,其他出版社有心重翻也无能为力了。一本好书甚至一套好书就此被糟蹋,而利益受损的当然是读者。除了态度,还要有水平,书不是随便一个人都可以写出来的。时下里许多书的名字起的要多吓人有多吓人,总是让我想起了街边卖大力丸的:“只要吃了我的药,就刀枪不入、百毒不侵”。可事实上许多作者本身功力薄弱, 写不出架构与精神,于是入门书籍千篇一律就是教大家按下菜单,选择命令, 出现对话框,按下‘确定’ ...”。 真正的老师不好找,但“二把刀师傅”却到处都是(就象现在一天到晚占着电视频道的歌星、影星一样让人眼花缭乱)。加上某些出版社把关不严,这才造成了是个人就可以出书的现象。
今天,我为大家介绍几本com的书籍,希望能在com的学习上助君一臂之力。
欲学com之必读书籍---《com技术内幕》
书名:《com技术内幕》
英文原名:《inside com》
作者:(美)dale rogerson
microsoft press 1997
中文译者:杨秀章
清华大学出版社 1999年3月第1版
定价:50.00元(带光盘)

microsoft press的《inside ……》(翻译成中文就是《……技术内幕》)系列书籍似乎总保持着独到的权威性,很少让人失望。从《inside ole》到《inside visual c++》,都十分受到读者的欢迎,名声极好。《inside visual c++》称的上是深入浅出的典范,大师的语言以及清楚的思路都让人收益非浅。但是可能是由于名字的原因,很多想学visual c++的人面对这本厚厚的大作的时候,多少总有些胆怯,担心自己看不懂。少勇认为,只要你具有了一些c++的基本知识(有win32的概念更好),学这本书就不难,当然毅力是克服困难的秘方。
《inside com》也称的上是一本难得的上乘之作,这本书的最大特点在于语言轻松、循序渐进,在选材和结构组织上不难看出作者着实是煞费了一番苦心。为了把“门槛”设得低一些,作者在前几章尽可能地回避了很多诸如类厂、注册表等难点和细节问题,集中“优势兵力逐个歼灭敌人”,我不知道dale rogerson先生是不是从朝鲜战争中彭总司令的指挥艺术中得到的启示。在示例程序的安排上,每章都有一到两个独立于其他章节的程序,而且作者尽量使这些程序简短而完整。一方面短的例子阅读起来比较容易,另一方面读者可以将学习的重点放在com组件的需求上,而无需费力去搞清楚复杂的例子中的那些不必要的细节及复杂的实际问题。于编程语言,作者采用的是传统的c++语言,没有涉及到任何win32以及mfc的知识,除了在第九章中用到了一些方便的接口指针类之外,书中的其他部分都没有用到模板类。总之作者尽可能地抛掉了一切累赘使读者能轻装前进,只要你学过标准c++,有面向对象编程的基本概念(封装性、继承性、多态性),就大可放心地读这本书了。
书的前五章讲的很明白,都是一些诸如组件、接口、引用计数、接口查询以及dll等基本概念,无需少勇多费口舌。稍微有点美中不足的是书里边建立程序时都用如下命令:
“cl client1.cpp create.cpp guids.cpp uuid.lib”
“cl/ld cmpnt1.cpp guids.cpp uuid.lib compnt1.def”以及
“nmake ╟f makefile”。
     问题是,现在有多少人能够很熟练地写makefile文件以及运用nmake和cl命令?恐怕很少吧。于是读者就得花很多时间来琢磨程序的编译过程,费时、费事、不打粮食!
    当然,作为原理性的论述,这些东西还是要讲,但是至少应该告诉读者该如何操作才对。我拿第五章的例子来说,首先是建立组件dll:由于有了vc++,我们大可不必用“cl/ld”来做了,只需要编辑好cmpnt1.cpp、cmpnt1.def以及iface.h、guids.cpp后,在vc++的集成环境中选择建立一个空的win32 dll工程,把这四个文件加入工程,编译连接后cmpnt1.dll就生成了。然后是建立客户程序:很多人往往这样做:先建立一个空的win32工程文件,然后把编辑好的标准c++文件加入工程,可是却通不过连接。
   于是不止一次的有人问我:在vc++下如何建立标准c++的工程?
   (1)、随便写一个标准c的程序,越简单越好,如:
            main(){return 1;}
把这个文件存入你希望的目录下,一定要与你想建的工程同名。(如果你希望的工名是apple,那么你应该把这个文件存为apple.cpp)。
   (2)、编译apple.cpp,这时vc++会提示你没有建工程,是否需要他为你缺省地建一个,当然“是”。于是vc++就在存有apple.cpp的目录下创建了名字为apple的工程。
   (3)、下一着就是“过河拆桥”,从工程里删除apple.cpp,加入或者编辑你希望的文件即可。
书的前六章讲的很明白,都是一些诸如组件、接口、引用计数、接口查询以及dll、hresult、guid、注册表等基本概念,大体上过得去,无需少勇多费口舌。
第七章讲述类厂,利用类厂来创建组件可能会让人迷惑:不用类厂,一样可以写出功能同样强大的组件来,为什么还要多此一举呢?少勇认为,如果您只想写一个进程内的组件,那么这句话一点没错,因为您完全可以写一个全局函数来创建所有的组件,这时,我们丝毫看不出类厂有什么存在的必要性。但是,如果您要跨进程来创建组件,则情况就不同了:您能写出在其他进程中创建组件并返回句柄的“全局函数”来吗?于是乎microsoft就想出了创建一个特殊的组件,用这个特殊组件来创建其他的组件,这个特殊组件就是类厂。在进程外组件的创建过程中,类厂接口iclassfactory是第一个跨进程的连接。
第八章是至关重要的一章,讲述了组件的复用:包容和聚合。关于“com是不是面向对象的”之类的讨论好象一直在进行着。com曾经被指责是一项很差的技术,原因是com不支持传统意义上的“继承”。这里我们得这样来看这个问题:组件具有“可独立发布特性”和“二进制特性”,既然可独立发布,就不应该依赖于某个基类,否则如果基类变了,那么组件也得跟着做变动,可独立发布也就无从谈起。而组件复用又是一个现实存在的问题,因为用现成的组件实现新组件的某些功能可以节约大量的时间,com利用包容和聚合实现了组件的复用,这样既维护了组件的“可独立发布特性”,又变相实现了“继承”。嘻嘻!把“猫”叫了个“咪”。少勇认为,关于一些无碍全局的争吵越少越好,衡量一个技术好坏的标准是看它是不是确实好用,能不能解决我们的问题。
关于本章的示例程序作一点说明:
细心的读者可能都会提出这样的问题:在cmpnt1.cpp的ca::init()函数中有这么一句:
hr=m_punknowninner->queryinterface(iid_iy,(void**)&m_piy);

本文关键:介绍几本COM的书籍 -- 想要学COM无从入手的朋友必看
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top