三本 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 程式設計好書
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表