三本 Windows 程式设计好书

>>>  名人論史——近當代作家的史學觀點  >>> 簡體     傳統

发表日期:1993.01

Windows 程式设计书籍有投鞭断流之势,
琳琅满目,一本本都有红砖般厚。
这篇文章中我为您介绍三本这方面的大哥大书籍,
它们完全相同的一个特徵是,
厚的不得了,重得不得了。

Windows 3 问世之後括起一阵旋风,知名应用软体纷纷推出 Windows 版本。一攀上图形使用介面 (GUI),彷佛软体就「高级」了不少,价格高一些似乎也就理所当然心安理得。这种情况之下 Windows 程式设计书籍真有投鞭断流之势,端的琳琅满目。这些大部头书一本本都有砖头般厚 (红砖,不是瓷砖),掉到地上小心砸痛脚。

这篇文章中我为您介绍三本 Windows 程式设计方面的大哥大,除了列出主要内容外,也提出它们的特色,供读者选购时叁考。这三本书当然是一时俊彦,有其过人之处与独特之方,而完全相同的一个特徵是,它们都厚的不得了,也重得不得了(尤其是第一本 Charles Petzold 的 Programming Windows,不知纸张磅数是多少)。对侯捷这种年纪来说,三本书放在包包里拿上拿下是沉重的负担。有位朋友把它们拆开来,每一次包包里放个一、两章,倒也不失方便性,就是可怜了伟大的作品分身裂骨。

视窗的产生、GDI 基础绘图、对话盒等基本主题在各书中一再重覆,颇令人有鸡肋之叹。此乃人之常情,再基本的东西每个人也有自己的诠释方法,而且这些基本题目放进去不仅篇幅增多,读者群也扩充,如果你是作者,也是一样吧! 傻瓜才会不识时务尽写些金字塔顶端的书,阳春白雪削尖了头永远是销售排行榜上的孙山。刚刚提到篇幅,呃,这个篇幅大有学问,和书籍定价有绝对的关系。许多出版社以书籍的篇幅来定价钱你信不信 ? 基本价一页七毛钱,论斤卖了简直是!

如果能够有专门探讨 Windows 特定领域的程式设计书籍,前面说的鸡肋之叹就不会再有。很可惜目前市面上还很少这种专书。这是金字塔顶端的书,不好卖,是给有基础的人看的。SAMS 出版社目前正准备出一系列单行本,包括记忆体管理、OLE/DDE、Resource、MFC/OWL (前者是 Microsoft Fundation Class,後者是Borland 的 ObjectWindows Library),并已推出其中一部份。我们拭目以待。

书名 Programming Windows(2nd Edition)
作者 Charles Petzold
出版 Microsoft Press
页数 19 章,944 页
售价 US$ 29.95 磁片 No(可另外购买)

section I : Getting Started
1. Hello, Windows
2. Painting with Text

section II : Reading Input
3. The Keyboard
4. The Mouse
5. The Timer
6. Child Window Controls

section III : Using Resources
7. Memory Management
8. Icons, Cursors, Bitmaps, and Strings
9. Menus and Accelerators
10. Dialog Boxes

section IV : The Graphic Device Interface
11. An Introduction to GDI
12. Drawing Graphics
13. Bits, Blts, and Metafiles
14. Text and Fonts
15. Using the Printer

section V Data Exchange and Links
16. The Clipborad
17. Dynamic Data Exchange (DDE)
18. The Multiple Document Interface (MDI)
19. Dynamic Link Libraries.

petzold2.jpg (19220 bytes)


Charles Petzold 的 Programming Windows 在此领域非常有名,出版公司宣称已销售 175,000 本(乖乖的隆咚)。BYTE 杂志称其「巨细靡遗,任何在 Windows 环境下的严谨工作者必备」。Dr. Dobb's Journal 的书评则说此书「毫无疑问,是 Windows 程式设计方面举足轻重的一本书」。而我对它的评价是兼具深度与广度,不论对初学者或是入门者,此书都值得放在你的书架上,绝不会只是占据空间而已(不过厚达 944 页的它也的确占了不少空间)。

这本书有一个特色,范例很多,而且都很简洁,旁芜枝节一概滤除。结构化程式设计常会产生许多函式,读者很容易搞不清楚什麽是 Windows API 函式,什麽是应用程式自己的函式。但 Petzold 的程式并不分出太多函式,这种风格使读者容易看到程式的重心。Windows SDK 套件本身也附有十几个范例程式,但如 SHOWDIB、DDE 等高阶主题都巨大的不得了,程式员要进入情况很难,前後交互叁考的困难度也大增。Petzold 这种方式(短小而直接切入主题,不加太多包装) 的缺点是每一个范例程式大约没有什麽重复使用的价值(必须再加修改与包装)。不过以教育眼光来看,这应该是比较好的作法。一本好书应该教我们钓鱼的方法,而不是给我们一条鱼。

这本书和所有 Windows 程式设计书籍一样不能免俗地从 "Hello World !" 开始讲起。第二章介绍视窗的卷动技巧,范例很短,容易学习。可惜这只是文字的卷动,如果你想要图形的卷动,可以叁考 SDK 的 ShowDIB (该范例硕大无朋,保证让你用功一个礼拜以上)。第三、四、五、六章介绍硬体输入(滑鼠、键盘以及计时器)。第六章讲 Child Window Controls 时竟然没有提到如何设计「订制型 (customize) control」,是让人稍感遗憾的。作者只在第十章稍微提到一些这方面的简单作法。Richter 的书 (稍後介绍)在这个主题上就表现得极为突出。

第七章是本书的第一个大特色。由於 Windows 标准模式和 386 加强模式都已进入CPU 保护模式中,所以 Windows 在记忆体管理方面有很大的变革。第七章介绍记忆体管理,有许多系统层面上的讨论。其中对於可移动节区、可丢弃节区造成远程函数及 export 函数呼叫时的困难,以及 Windows 系统如何完成所谓的动态联结,都有详尽描述。这一章技术层面深,需要多看几次,并广泛阅读其他资料,旁徵博引,才能略窥保护模式记忆体管理的堂奥。本章已脱离写应用程式的「知其然」,进入作业系统的「知其所以然」的层面。

接下来的数章讲述资源与图形装置介面 GDI,这也是 Windows 程式设计书籍竞争最白热化的地方。这些主题由於基础而浅显,懂的人多,当然能写的人也就多。不过戏法人人会变,各有巧妙不同,Petzold 的戏法硬是比别人的高明一些。第十章讲对话盒的产生以及使用观念,本来没有什麽难的,但本章对於一些特殊动作特别提出来说明,就显得别具价值。这些特殊功能包括 : 在对话盒中绘图、定义自己的 control、以及如何在 RC 档的 dialog template 中指定 window class。

第十七章讲动态资料交换 DDE。许多程式设计书籍对此主题要不就是完全不表,要不就是观念一笔带过,再要不就是给一个又臭又长的范例原始码,让人看得眼冒金星。这种情况下本书的这一章显得特别突出,也是我在课堂上极喜欢引用的例子。Petzold 以美国人口预测为主题,用一个极简短的程式 (server 649 行,client 387 行)让你了解 DDE 程式的完整风貌(SDK 所附的 DDE 程式至少 5000 行)。一般人学习 DDE 最大的迷思在於 hot link 号称是「资料有变,自动通知」,但程式员并不了解「自动」是对何而言 ? 是 Windows 系统随时自动侦测某一块记忆体的内容而做出反应吗 ? 不,作业系统没有那麽聪明! hot link 只是个协定,所谓「自动」是指某笔资料被约定为hot link 之後,server 对该笔资料就有责任时时监督;一旦该资料的内容有变,server 有责任以讯息通知 client。本章的范例对此有十分明白的表示。如果你不了解 DDE 三层资料结构(Applicatoin、Topic、Item) 的意义与关系,一定也可以从此章获得解答。

第十九章除了示范动态联结函式库(DLL) 的写法,对於 DLL 为什麽与一般应用程式不同 (包括编译、联结、程式码撰写),也有许多作业系统层面上的解释。读者可以从这一章学习到如何以 DLL 分享程式码、资料、以及资源。大部份的书籍在讲 DLL 时都只侧重它如何分享程式码而已。

各个章节都有很不错的表现。尤其我说过,其范例程式是最大的优点,行云流水,直接扼要。若要说缺点的话,就是图太少,这些图又都只是程式执行结果的萤幕硬拷图,搔不到痒处。读者最需要能够代表一大堆文字叙述之观念示意图,本书在这一方面付之阙如。文字部份,侯捷虽没有能力评断原文书的文笔好坏,但本书平易近人,阅读堪称顺畅。看不懂的应该是技术部份而不是文字部份。读者不要因为其 NT$ 700 以上的售价而裹足不前,这一本好书抵得过无关痛痒的书三本,绝对物超所值。现在看一场电影要 NT$ 140,听一场音乐会要 NT$ 150(国家音乐厅三楼最後一排),如果带着男(女)朋友,一个晚上的花费绝不只这本书。省下一个浪漫的夜晚吧,人生还很长,你可能因此获得无数个愉快的工作天。

这麽赫赫有名的书,国内当然有译本,只是,可惜了这麽好的原着。电脑出版界对於译本的品质不愿意花下成本去控制 (我想恐怕好的译者比好的作者更难求哩,难求自然价高),甚至於根本无法控制(审稿的人在哪里呢),一直令人伤心。

讲到翻译,如鲠在喉。今天市面上这麽多这麽多的电脑翻译书籍,对台湾资讯界确实是有贡献,但是把我们训练成最不能挑剔的读者 (再挑剔没书看了)。译者不敢义译,而纯以对嘴的刻板方式来翻译,说穿了是对自己没有信心。「看,原文就是这个样子,一字不差,看不懂可不关我的事 !」。事实上翻译应该是一种再创造,译者本身对制作主题没有两把刷子的话,如何消化吸收、在字里行间中加入一些语意的强化、语气的转折 ? 如何能够把外国人思维模式的产物转化为中国人能轻松接受的东西 ? 我们的书市上还有不少译作是全家总动员完成的 -- 反正老婆在家闲着也是闲着。至於老婆不懂电脑怎麽办 ? 没关系,套句台语「边打边热」嘛。吓 !!!

量与值的不能配合,不光是译者的责任,出版社也应负责,因为出版社站在鼓励与预期的立场,一本书才得以问世;我们消费者也有责任,因为超过 NT$ 350 块钱的书,你就开始犹豫了 : 我是买了呢 ? 还是「先」和阿花去看一场第六感生死恋 ? 可这世界上哪里有「便宜又大碗」的东西呢 ?
如果讲到审稿,那不仅是如鲠在喉,简直是如坐针毡。如果你知道我们有些出书过程只比到 7-11 买个叉烧包稍微麻烦一些,恐怕以後选书就要瞪大眼睛了。peer review (同僚审核) 制度国内尚未建立,技术内容的正确性只好请读者自求多福。

当然,没有人愿意把事情做坏,没有一位作者愿意将错误的资讯放到他的书中,但是一份标题很新很吸引人而内容半确定半不确定的资料,就可能在不十分严谨的作者手中为了抢市场先机而出去了。出版社这边没有最後一道关卡的话,可真叫人捏把冷汗。国内一位知名学者的书稿在 Prentice Hall 出版社谈好也编好,三年了却还未面世;但我也耳闻国内有出版社为了赶 DOS 版本更新,一星期连写带印出书。一星期! 没有诳你。也有一年写书以打计的作者,老实告诉你我绝不相信有天纵英明如是者。

书名 Programming Windows(3nd Edition)
作者 Charles Petzold
出版 Microsoft Press
页数 19 章,983 页
售价 US$ 49.95
磁片 Yes (章节与 2nd Edition 相同)

petzold3.jpg (16396 bytes)


离题了 ! 回到主题上。我有一个好消息和一个坏消息。好消息是 : Petzold 已经写了 Programming Windows 第三版 (内容修定才称为一版(Edition),我们一般说一本书卖到第几版应该正名为第几刷)。坏消息是,这本新书不如预期中的精采 (或许是我对所谓「新」版的期望过高),虽然 3.1 的大红招牌高高挂,但只收录了新功能中关於 DDEML、TrueType Font、Common Dialog 等主题,其它如 OLE、ToolHelp、Version Control 完全未表 (多媒体就更不消说了)。DDEML 方面只提供与raw DDE 比对的一个范例程式,没有太多文字说明;Common Dialog、Truetype Font 都附有范例程式,但文字说明也是不多。此外,绝对可惜的是,第七章竟然缩水了,少了 How Windows Moves and Reloads Program Segments 这个主题,而这个主题却是了解 Windows 作业系统中动态联结的关键。

本书过去是如此面面俱到,被奉为圣经地位,如此遗漏实在不应该 (我这样批评自己的偶像,心中在淌血)。可是我自己也知道这些主题内容之丰富与复杂,几乎都可以单独出书。

新版(第三版) 的优点是,所有原始码可以在 Borland C++ 3.1 或 Microsoft C/C++ 7.0 两种编译器中顺利编译、联结完毕,而且 makefile 不需更改。这个技巧值得身为 task leader 的人注意一下。作者并且也考虑到了将来移植到 32 位元Windows NT 时的方便性,在函数型态以及叁数型态方面都异於 Windows 3.0 SDK 规格。举个例子,Windows 3.0 中的 MainWindowProc() 是

long FAR PASCAL MainWndProc(HWND hWnd,
                            unsigned message,
                            WORD wParam,
                            LONG lParam)


而新的写法是 :

long FAR APIENTRY MainWndProc(HWND hWnd,
                            UINT wMsg,
                            UINT wParam,
                            LONG lParam)


新版的另一好处是书後附有磁片,所以严格来说即使你已有第二版,本书仍然是物超所值。第二版书的磁片我可是以 NT$ 1000.0 另外购得的,据悉有人把该磁片内容放到 BBS 上,真不应该,换做你的产品被人家这样对待,你作何感想 ?

Petzold 另外还有一本进行中的新作是 Graphic Programming in Windows,厚达800 页。这两本新书都含磁片并且售价 US$49.95。读者在期盼好书之馀,应该也要有一分钱一分货的心理建设与一分货一分钱的心理准备。

背景资料 :
书名 Windows 3 : A Developer's Guide.
作者 Jeffrey M. Richter
出版 M&T Books
页数 8 章,670 页,含磁片
售价 NT$ 750.0 (仅供叁考)

1. Anatomy of a Window
2. Subclassing and Superclassing Windows
3. Dialog Box Techniques
4. Designing Custom Child Controls
5. Setting Up Printers
6. Tasks, Queues, and Hooks
7. MDI Application Techniques
8. Installing Commercial Applications
Appendix A : The Nowindws.h File
Appendix B : Windows Bitmaps
Appendix C : Accessing Class and Window Extra Bytes

 

win3adg.jpg (16619 bytes)

 

此书是异数,我之所以这麽说因为它是少数不从 Hello、Menu、Dialog、Control... 等初级内容讲起的书,可它也不是 DDE 或OLE 或 DLL 或 Memory 的特殊秀,它讲的还是视窗的产生、对话盒技巧、控制元件(control)...,只是深度又多了十几米。本书的诉求对象是已经具备基本功力的人,譬如说看完 Programming Windows 一书(这样的人真不多,贡在书架上的人倒是不少)。

从章名来看,你可以发现作者已经跳脱以 Windows 技术项目为进行方式的巢臼,而从应用的角度来发展整本书的经纬。例如第八章讲安装程式的设计,提到如何以 DDE 与 Program Manager(它是个 DDE server)通讯;又例如在第一章「透析视窗」中,就介绍了许多取得 Windows 内部资讯的 API 函数,并且介绍这些资料的实际意义,从而导出 Windows 作业系统的技术性问题。字里行间曝露许多系统原理,而不只是应用程式的设计与撰写技巧,这是许多Windows 程式设计的书难望项背的。

本书介绍的观念,看似平凡,其实深入而重要。第一章就解释最基础的 class 和 window 的观念,第六章解释什麽是 module、task、instance、message queue、hook。这些基础观念只有即将进入乾坤大挪移第七层神功的程式高手才会去注意。

除了这些重要观念,在实作技巧上作者 Richter 绝对是个高手,每一个程式都考虑极为周详。他自己也出版了一个工具软体,名为 Voyeur,可窥视系统以及应用程式的内部资讯,包括 class、system、instance、message...等资讯。Voyeur 是法文「淫癖患者、偷窥狂」的意思,真亏 Richter 敢用这种奇异字眼,惊世骇俗可封为电脑界的玛丹娜。Voyeur 软体的阳春版也列入本书磁片中。现在写一个 Voyeur 不算太难,Windows 3.1 SDK 的 ToolHelp 模组有成堆的 API 等着你呼唤。

第二章的 Subclassing 和 Superclassing 是 Windows 物件导向精神中很重要的一部份。Subclassing 可以继承原 class 的功能与性质,对於实现软体 IC 的重复使用性有很大的贡献。Superclassing 与 Subclassing 极类似,也具备相同的继承特性,但比 Subclassing 更具弹性,更独立完整,设计上比较复杂一些。Subclassing 在许多技术杂志上被提过不少次,但在软体书籍中被详细介绍的并不多,Superclassing 更属凤毛麟角。Richter 的书籍对这两个主题的讨论,无疑是当今书坛中最引人注目的。

第四章 Designing Custom Child Controls 补 Petzold 书籍之不足。Petzold 在他的书中介绍了对话盒内的一些变化行为,但对於「订制型 control」着墨过少。我们知道class 分为三种,分别是 :

1. System Global Class
2. Application Global Class
3. Application Local Class

其中第一种 class 其实就是 control。Windows 允许你自行设计 control 以扩充系统能力。只要遵循规则,发展出来的 control 可以成为标准的 control,行之四海皆准。本章的两个范例 meter 和 spin 都很实用,Microsoft 实在应该考虑把它们放到标准的 control 家庭中来,我希望他们能够像对待 Common Dialog 那样地从善如流。

第六章的 hook 也相当难得。由於 hook 可以拦截不属於你的讯息,所以整个系统几乎可以在你挂上一个 hook 函数之後被你玩弄於股掌之间。於是我们可以自己写一个Screen Saver,或是一个 Recorder -- 只要你掌握 hook 技术。

本书十个范例程式非常珍贵。想要一个 SETUP 程式把你的宝贝漂漂亮亮拷备到客户的硬碟中并在 Program Manager 建立 group 和 icon 吗 ? 市面上有售,但你可以从第八章免费获得一个,只要修改文字描述档 SETUP.INF 就可以为自己服务。第六章的 Hook 范例,一是萤幕保护程式,一是 Recorder 程式,相信对高级 Windows 程式员会有很大、很大、很大的吸引力。

我曾经提过,Petzold 的书示意图不够多,Richter 的这本好一些,而且制作精美。我自己的买书意愿常常会受图片的多寡、图片内容的深度,以及图片制作良 而影响,因为在书店中匆匆想看出原文书的内容深度并不容易。不知道你的习惯如何 ?

本书已有新版,名为 Windows 3.1 : A Developer's Guide :

 

背景资料 :
书名 Windows 3.1 : A Developer's Guide.
作者 Jeffrey M. Richter
出版 M&T Books
页数 10 章,715 页,含磁片

1. Anatomy of a Window
2. Subclassing and Superclassing Windows
3. Dialog Box Techniques
4. Designing Custom Child Controls
5. Setting Up Printers
6. Tasks and Queues
7. Hooks
8. MDI Application Techniques
9. Implementing Drag and Drop
10. Installing Commercial Applications
Appendix A : Determining The Stack Size Required by An Application
Appendix B : Accessing Class and Window Extra Bytes
Appendix C : The Builtins.JMR File.


本版增加 Drag and Drop 以及 Version control 两个题目。Windows 3.1 已放弃真实模式,这本书却还花篇幅在 EMS 记忆体模式上,给我的感觉是没有割爱。如果旧技术有助於新技术的了解,那麽这旧技术当然值得详细阐明,可是 EMS 并非这麽回事。

这本书最大的进步是第九章关於应用程式对 Drag and Drop 的支援,以及第十章对 Install 程式的设计。要支援物件导向的 GUI 介面,你的应用程式应该提供滑鼠拉曳的能力。试想,以滑鼠选按一个档案然後把它拉到一个垃圾桶,或是丢到一个火炉(还会冒出熊熊火焰),表示要杀掉此档,这对使用者是多麽友善的介面;把 File Manager 列出的资料档案以拉曳的方式拖到应用程式视窗中,表示要开启这资料档案,这也是十分能令人接受的直觉动作。支援 Drag and Drop 的关键其实就在於应用程式是否能获得某种代表「有物件被拉曳到你的视窗中了」的特殊讯息,以及能否从某块记忆体中获取「被拉曳过来的档案名称」或是「某些特定意义的资讯」。应用程式在这方面的行动可以归纳为四点 :

■ 以 CreateWindowEx(WS_EX_ACCEPTFILES,...) 产生视窗。

■ 上述视窗因而具备接收 WM_DROPFILES 的能力,这一讯息表示使用者把某物件拖拉到你的视窗上头了。讯息的 wParam 带来某块记忆体。虽然程式不必在意,但显然这将是一块 Share memory,否则怎麽能够跨程式之间使用呢 !

■ 应用程式以 DragQueryFile() 从记忆体中取出档案名称,根据这档名就可以做想做的事。

在 Drag & Drop 中,能够接受物件的称为 client 程式,而像 File Manager 允许使用者将物件拖曳走的,称为 server 程式。这一章也示范了一个简易的server 写法,不过并不是正规作法。

第十章的安装程式是前一版书就有的,但是这一版新书加上了软体版本控制以及档案压缩的能力,两个都是 Windows 3.1 新增的能力。这一章的范例程式就功能而言绝不输给市面上销售的安装专门软体,它的弹性颇大,只要你依一定格式填写一个 SETUP.INF 档,SETUP.EXE 自然会去解读其中资讯而做出你指定的安装程序。
这里所说的本书两个新增功能,事实上作者 Richter 曾经发表於两篇文章上 :

■ Drop Everything : How to Make Your Application Accept and Source Drag-and-Drop Files ............................ MSJ 1992.05

■ Streamline Your Program's Setup with the Version Control and Decompression DLLs ......................... MSJ 1992.10
 

 

背景资料 :
书名 Windows 3.0 : Power Programming Techniques.
作者 Peter Norton & Paul Yao
出版 BANTAM Computer Books
页数 21 章,940 页
售价 US$ 29.95
磁片 No (可另购,US$ 15.95)

Part I -- An Introduction to Windows
1. An Introduction to Windows

Part II -- A Minimum Windows Program
2. A Minimum Windows Program
3. Windows Programming Conventions
4. Understanding the WINMAIN Function
5. Understanding Window Procedures

Part III -- Introduction to the Graphics Device Interface
6. Overview of GDI
7. Pixels and Markers
8. Drawing Lines
9. Drawing Filled Figures
10. Drawing Text

Part IV -- User Interface Objects
11. Commands : Menu and Accelerator Basics
12. Enhancing Menus with Graphics
13. Windowing
14. Dialog Boxes

Part V -- Message Driven Input
15. Message Driven Input
16. Mouse Input

Part VI --- Operating System Considerations
17. Memory, Part I : System Memory Management
18. Memory, Part II : Application Memory Use
19. Dynamic Linking

Part VII --- More Topics in GDI Programming
20. Coordinate Transformation and Scrolling
21. Printing

 

peter norton.jpg (20476 bytes)


Peter Norton 的大名自不待言,自从他的 Inside the IBM PC 问世之後,Norton 就和 PC 划上等号,成为软体界家喻户晓的名字。他的软体产品 Norton Utility 更与 PC Tools 同被誉为 PC 管理工具的两大王牌(号称神的右手与魔鬼的左手)。像 Norton 这样,名字可当广告用的,台湾电脑出版界唯一人耳。另一位作者Paul Yao 虽不及 Norton 这麽有名,却绝非等闲之辈,常常看Microsoft Systems Journal (注一) 或 Programmer's Journal(注二)的读者一定对此君不陌生,他是那种能够直通 Microsoft 後门的专栏作家,同时也是 International Systems Design 公司的总裁,此家公司专门做 Microsoft Windows 的谘询顾问、软体设计与训练。

Norton 的书很容易认,你只要在封面或书背上看到一个金发男子,斜叉手臂於胸前,第一个扣子不扣就绑领带 (质料看起来还有点怪),嘴上挂着一抹神秘笑容(嘿嘿,来买我的书吧),那就是 Norton 老兄。长像还不赖,就是这自我意识强烈的有点儿那个。这本书的封面是两个男子的玉照,嘴上都有一抹神秘的笑容。Yao 是黄皮肤,黑头发的东方人。

Yao 或 Petzold 或是 Ray Duncan(此乃天王中的天王,巨星中的巨星,以後介绍)在我个人心目中的地位,丝毫不逊於 Bill Gates。拥抱 Bill Gates 是如此困难,拥抱 Ray Duncan 却是如此简单。你可以在任何时间送电子邮件给 PC MagNet:72241,52 或是 MCI Mail:rduncan 或是 BIX:rdumcan 和他联络。其他知名作者有许多也是电脑期刊的作家,可以从杂志社那边获得与他们联络的方法。但你别试图和侯捷联络,我是不敢把位址、电话放在杂志社的,免得一言不慎哪一天被人在黑暗的巷子里「盖布袋」。

说到这里,不知道 Gates 先生的传记您看过了没 ? 没看过的话就逊了点。现在流行一句话,读过父子情深和弹指乾坤这两本书,你就软硬兼修,四方不败了。(父子情深是 IBM 前总裁 -- 把 IBM 拉拨为世界巨人的关键人物 -- Watson Thomas J. 的传记)。

本书上手的第一个感觉,像是牯岭街的陈年风渍书。原因是封面以蓝、白为主调,你会以为你要站起来读这本书 (伟人的纪念堂也是这个颜色)。另一个原因是内文印刷不论是文字或是图片都谈不上精美二字。在书籍制作品质上,本书排名倒数第一。然而所谓「败絮其外,金玉其中」是可以用来形容这本书的。

这本书前半部也是讲基础东西,并没有什麽特别突显之处。第一个大特色是它在第十七章和十八章对 Windows 记忆体管理有十分详细的描述,这一部份是出自 Yao 之手。Yao 对记忆体的功力真是无人能出其右 ! 他在 Microsoft Systems Journal 上发表的文章诸如 :

○ Windows 3.0 Memory Management : Supporting Disparate 80x86 Architecture 11/1990

○ Improve Windows Application Memory Use with Subsegment Allocation and custom Resources 01/1991

○ An Introduction to Windows NT Memory Management Funcamentals. 07/1992

都是十分精采的佳作。本书第十七章是系统层面的记忆体管理 (与应用程式撰写并无直接关联),从最基础的定址能力说起,对於保护模式多有描述,想了解保护模式定址的人这部份不要错过。第十八章则是应用程式使用记忆体的技巧。Yao 介绍了 AUTO 资料节区(Windows 64K 限制的起源) 的结构,以及 subsegment 和 custom resource 的技巧,尽量想办法突破 64K 藩篱。尤其是 subsegment,Yao 利用 LocalInit() 欺骗 Windows 的手法会令你拍案叫绝,并且巧得让你有点儿为他担心(常走夜路的人小心碰到鬼)。这些内容其实也发表在上面所说的三篇文章中。

有人说 Windows NT 推出後,记忆体还有什麽问题! 是没有问题了,但那是 NT。Windows NT 并不是用来取代 Windows 3.x 的,它是 client-server 架构,适用於网路上的群组工作,PC 上的个人用户我想还是为自己的荷包省一点儿。况且 NT 从 1992 年中延到 1992 年底再到 1993 年初,如果你能等你就等吧。根据一位不愿意透露姓名的权威观察人士的马路消息表示,NT 甚至已经延迟到1993 年的第三季才会推出 (天啊)。(编按 : NT 已於 1993/05 面世,1993/08 出货,不算慢太久)。

本书另一个特色是它在第十九章对动态联结有深刻的描述。将此章与 Petzold 的第七章比对阅读反覆琢磨,你会有意想不到的丰收。当然大家都知道动态联结就是在执行时才联结 (呼叫) 过去,但配合「可移动记忆体节区」以及「可丢弃记忆体节区」,引发的问题超乎你想像。

好啦,这三本书一共可以帮你处理掉 2500.0 台票,如果你想好好学习 Windows 程式设计的话,二千五百 ? 算什麽 !

(注一) Microsoft Systems Journal(MSJ) 与 Microsoft 公司有什麽样的关系我不清楚,它由 M&T 而非 Microsoft Press 出版,讲的东西也不局限於 Microsoft 自己的产品 (不过大部份是),像它也刊过介绍 Borland C++ 2.0 的文章。此期刊的技术层次很深,掉到地上都会发出声音,可看性非常高。目前主要题目都在 Windows 3.1 以及 Windows NT。因为 Microsoft 公司的策略就是 Windows! Windows!! Windows!!!。(猴爷伟大的联想力记起了那遥远的、烙在美国人心中永远的痛 : 虎! 虎!! 虎!!! 新的伤口可能是烙在 IBM 的胸口)。

(注二) Programmer's Journal(PJ)已於 1992 停刊。我一时不察寄了一年份的订费,一本也没收到,亏大了。FAX 询问它也不回,*&#%@!。
 


侯捷 2010-07-15 08:32:56

[新一篇] 解脫之味不獨飲

[舊一篇] 再談 Windows 程式設計好書
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表