【基本資料】

書名:Windows DDE 動態資料交換
出版:旗標 1994.02
ISBN:957-717-075-7
頁數:9 章,606 頁
定價:NT$ 450.0



【自序】

任何人都對通訊感興趣,我相信! 想像一下,以數據機連接家庭電腦到窗外的世界,甚至接上全球網路,無限延伸您的視野,必然是件令人心曠神怡的樂事。

小小的 PC 世界中,行程與行程之間的溝通 (IPC,InterProcess Communication) 同樣令我們興奮,這從來不是 MS-DOS 可以一窺神妙的領域,因為 MS-DOS 是單工作業系統。在 Windows 這種多工環境下我們很容易看到行程通訊帶給我們的驚喜與好處。Windows 提供的 IPC 實作方法不只一種,本書介紹的是「動態資料交換」(Dynamic Data Exchange),包括低階的 DDE 通訊協定和高階的 DDEML 函數兩大技術。以低階的通訊協定完成 DDE 程式,是知易行難的最佳例證;以 DDEML 設計程式,才算是稍稍符合人性。書中的範例程式盡量強調圖形顯示,期能更吸引您對 DDE 的興趣,也許您還能夠從中獲得一點點動畫技巧。

Windows 整個 IPC 的基礎建立在它的訊息系統,而疊床架屋的終極目標是OLE (Object Linking & Embedded)。如果票選一種最帶給使用者方便而給程式員痛苦的題目,OLE 應該得高票,它的技術觀念以及實作十分龐大複雜,又需要許多基礎知識。OLE 是 IPC 主題中不可缺少極其重要的一環,甚至是Windows 進化到物件導向式作業系統的關鍵技術,我把它放到下一冊書中,過一段時間您就可以看到它。Clipboard 也是 IPC 中不該缺席的一個題目,由於實作容易,絕大部份軟體早就加上了這功能。Clipboard 與 OLE 的關聯性比較高,所以我把 Clipboard 和 OLE 放在同一本書中介紹。

撰寫 DDE 書籍的困難處在於,不僅要把觀念介紹好,更應該能夠成為讀者在實際設計程式時方便的查閱手冊。我花了很大的心思在這一點上面,包括目錄的設計、章節之間相互參考的標註、第九章的表格總整理與程式碼列表的頁碼註記等等,期望您在嘗試動手之際能夠感受這本書帶來的方便性。

正如本書主旨把個別程式開放到整個多工環境,我們也應該把自己的視野開放到整個世界。附錄 C 「開一扇世界之窗」引介兩篇文章,一是曾銘源先生原載於倚天雜誌的作品 "取得 Microsoft 技術文件的管道",另一是節錄侯捷先生原載於微電腦傳真雜誌「無責任書評」專欄中的"資訊世界的另一扇窗-雜誌"。謝謝朋友的慷慨允贈,使本書增色不少。同時我要在此鼓勵每一位在 Windows 領域中工作的朋友 : 善用資源。本書第八章就有許多錄自 MSDN 光碟片中極富價值的程式,這些都可以自由運用,對您的 DDE 學習之路一定大有助益。

向來堅持把所有原始碼列於書後,因為自己對於電子型式的資料有一種閱讀上的障礙,非把它變成白紙黑字不能踏實。另一個原因是我恨兩段式閱讀 : 文字正看到興頭,原始碼卻在一張 5-1/4 英吋的膠片中。如果每一位讀者都得做同一件事 (列印程式碼),那麼在可能的範圍內就由我來完成吧。所以雖然書中程式都不小,我還是決定通通把它們放到書上 (只有第八章的 StdDDE.C 是個例外)。為了不讓頁數爆炸,程式碼都採用小一號的字型。

我是一個對用詞遣字非常非常嚴苛的人,幾已到了字字推敲的地步 (如果您閱讀起來還是不順心意,大概我倆風格不合)。關於電腦書籍中不可避免的英文字,一方面我希望專有名詞和術語儘量使用原文,一方面卻不希望太多的英文充斥在字裡行間,兩難! 本書的這種衝突更是明顯,原因是 DDE 的許多術語以及 DDEML 函數名稱都十分冗長。我已經盡了我的能力去達到一個自己還算滿意的平衡程度。

讀者來函對我的鼓舞謬讚與指正,都使我倍覺溫暖。未曾謀面的朋友卻能深刻察覺我對技術書籍寫作的熱誠與理想,在在令我感動,給我新的力量。如果有人說我的文字有著 "技術報告" 所沒有的人味和品味,是對我最大的恭維;至於技術,呃,有技術的人很多,實在不算什麼。文章千古事,也許在一年一小變三年一大變的 PC 軟/硬體世界中,談所謂的千古事顯得突兀好笑,但我確是以這樣的態度在監督自己的作品,而且我也從不認為當作業系統、軟體工具、程式語言飛也似地一版換過一版時,我們曾經打下的基礎會蕩然無存。不,從不! 紮實的基礎永遠使我們觸類旁通。

開出來的書單不敢或忘,資料的收集編纂以及思考也一直在進行中。是的,我的心中隱隱有一份建設藍圖,期許自己挖出最深入的資料,使用最順暢的文字,寫下最容易了解的範例,推演沒有任何疑慮的邏輯演繹。然而資訊世界唯一不變的定理就是 : 它永遠在變! 軟體技術不斷推陳出新,令人目不暇給,我不得不承認低估了整個資訊世界的衝刺速度而又高估了自己的生產能力。所以,有些書籍已經比預告慢了,非常抱歉。但我要說 : 它們都在進行之中。

明天就是 1994 的第一天,願我們都視野開闊,日精月進。

侯俊傑 (J.J.Hou) 12/31/1993

【本書架構】

對於長久在 MS-DOS 環境下工作的人 --- 不論是終端客戶或是程式員,Windows 的多工行程通訊 (IPC,InterProcess Communication) 恐怕是最感陌生的一個項目。MS-DOS 雄霸 PC 作業系統十年,有那麼多人在 DOS 環境下為記憶體空間而奮鬥,為改善人機介面而努力,而且也都開花結果。但是多工行程通訊 ? 唔,沒聽過 ! MS-DOS 從來就不曾是個多工系統。然而多工系統帶給終端用戶更為便利的整體工作環境,它的來臨意味著 MS-DOS 真的要從耀眼的舞台上慢慢退居幕後了 (甚至消失 ?! Windows NT 以及 Chicago 計劃 --- 可能就是Windows 4.0 --- 都已經不再需要 DOS 而為一個完整獨立的作業系統。不過它們都還支援 DOS 虛擬環境)。

多工環境 (如 Windows) 與單工環境 (如 DOS) 最大的差異在於前者可以同時執行多個程式 (執行中的程式我們稱為「行程」,process),而且行程之間還可以互通有無,整個作業系統對使用者而言變成為一個整合的工作環境。於是,過去以應用程式為主 (所謂 Application Center) 的觀念漸漸轉變為以文件為主 (所謂Document Center) 的觀念。這種觀念影響所及,各應用程式就可以專註在其特定領域裡發揮專長,不必龐蕪地像個巨獸 --- 巨獸總是難以成長,成長後也難以駕馭。使用者可以選購數個小型的專業軟體,藉由作業系統提供資料交換與整合的能力,完成其所要的產品 (也就是所謂的 document)。

這種 PC 工作環境的丕變,不論對軟體發展者或是終端用戶,都帶來極大的衝擊。

本書介紹 Windows 多工環境下的「動態資料交換 (DDE)」。DDE 是 IPC 功能中最具迷人魅力的一項,因為程式之間不必透過使用者的手就可以自行溝通、傳遞資料,其他像 Clipboard 和 OLE 都必須有終端用戶的參與;此外 DDE 還提供遠端控制命令 (remote control)。無論從觀念或是技術的角度來看,DDE 都屬於較高層次,您應該具備基本的 Windows 程式設計能力再來閱讀本書。如果您從未接觸過 DDE,可以在看完第一章之後先跳到第八章看一些範例程式的執行說明,自己動作操作看看。這些範例程式如果不是在您的編譯器套件中,就是在本書磁片中。

● 第一章 「動態資料交換 ? 動態資料交換 !!」

我永遠記得第一次看到 DDE 程式展示時心中的驚喜。如果您能夠分別買到兩個不同專業領域的軟體而它們都支援 DDE (例如一個是統計軟體一個是繪圖軟體),那麼就可以輕鬆愉快地把它們整合起來工作。本章對 DDE 做一個全盤性概觀性的介紹,並以各種商用軟體和本書範例程式做解說,讓您了解 DDE 的能力,以及能夠從書中獲得什麼樣的實作技術。

● 第二章 「思想起 - Windows 訊息系統」

DDE 架構在 Windows 訊息系統之上,換句話說兩個程式之所以能夠溝通,是因為它們能夠 'Send' 或 'Post' 訊息,也能夠 'Get' 或 'Peek' 訊息。這一章把訊息系統做重點式的整理。

● 第三章 「DDE - 低階的通訊協定」

這一章介紹如何以最基礎的 DDE 訊息和 DDE 結構實作出具備動態資料交換能力的程式,您可以看到通訊過程中的每一個細節。雖然 Windows 3.1 SDK 提供了更高階的實作方法 (DDEML),而且我也鼓勵您使用高階方法,但是了解 'Message-based DDE' 將有助於打下紮實基礎。這一章的範例是以一個 server 提供兩種資料,分別供應三個 client 的索求,以文字型式和長條圖顯示出來。

● 第四章 「DDEML - 高階的 DDE 管理程式庫」

沒有以 Message-based DDE 寫過程式的人不能體會它的繁與煩,那是知易行難的最佳見證。僅僅兩個 API 函數和九種 DDE 訊息和四種 DDE 結構,以及 ACK 來 ACK 去的握手協定,卻能夠把我們的程式整的破洞百出。Windows 3.1 提供高階的 DDE 管理程式庫,本章目的即在讓您了解這 27 個高階函數的意義與使用方法。由於有了 DDEML 扮演「電信局」的角色,DDE 程式的設計觀念以及方式較諸第三章有顯著不同,但是卻更接近我們的日常生活經驗。我設計了許多程序圖,相信您在本章會有豐碩的收穫。這一章的範例特別有趣,有點類似game,一定讓您對「動態資料交換」興致高昂。

● 第五章 「遠端控制」與「DLL 中的 DDE 服務」

如果把 DDEML 的動作在 DLL 中組合成更高階的 API 如何 ? 這是一個好主意,但是 DLL 的 WEP() 卻有一些蹊蹺必須特別小心。本章把 Program Manager 的 'Execute' 命令句通通寫在 DLL 之中,應用程式向Program Manager 下命令時因此可以不必要知道關於 DDE 的任何細節。這一章還介紹一個所謂的 'Execute Control 1' 協定,彌補 DDE 協定中對於Execute 命令句回返碼的規範不足。

● 第六章 「開放世界的鑰匙 - System topic」

多工環境下任何一個程式不應該自外於 IPC 系統。每一個 server 不但應該提供手冊把自己的服務列出供 client 發展者參考,而且最好還能夠動態地提供線上 (on line) 資訊。Microsoft 建議每一個 DDE server 都應該提供System topic,讓別的程式在與您溝通之前可以先透過這個管道獲得必要的資訊。本章有兩個例子,一個是 WildConn,把自己開放給任何一個以 Wild-Connect 方式要求通話的 client;另一個是 SysLst,可以掃描整個系統所有的 services 和 topics 和 items。

● 第七章 「網路 DDE」

把 PC 單機內的動態資料交換能力擴展到網路各工作站上,是多麼令人興奮的事情。一些協力廠商 (third party) 開發的產品,使得 Windows DDE 程式上網路輕而易舉,程式碼 99.9% 不需要修改 (真的)。本章介紹這方面的領導產品 Wonderware's NetDDE,以及 Microsoft 自己的 Windows For Workgroups (WFW) 網路能力。您將會學到 NetDDE 的完全透通性以及 WFW 的保密防諜能力。

● 第八章 「DDE 工具與範例程式介紹」

示範重要的程式動作並吸引您對 DDE 的興趣,是我製作本書程式的原則,希望在趣味盎然的情況下把程式間動態資料交換的精神和趣味表現出來。為顧及學習目的,範例程式儘量精簡。

這一章我介紹 Spy 和 DdeSpy 兩個工具,以及 Microsoft 和 Borland 編譯器套件所附的 DDE 範例程式。這些塊頭並不小的程式頗具參考價值,它們把大部份的 DDE 功能都寫的十分模組化,或表格化,值得您在真正動手時參考。

除了編譯器套件上的範例,我也從 MSDN (請參考附錄 C) 光碟片中取出五個例子,這些都是可以自由運用並修改的程式。尤其 8.8 節的 StdDDE 更是值得細究,使用它可以很輕易就做出一個 DDE server,我對此模組特別有較多的說明。

● 第九章 「DDE/DDEML 程式設計參考表與範例程式原始碼列表」

這一章是與 DDE 相關的各個 API 函數、資料結構、訊息的總整理。為了讓本書成為您撰寫程式時良好的參考手冊,所以才把這些資料圖表全部集中成為單獨的一章,方便查閱。每一個API 函數或資料結構的相關章節頁數都會標示出來,方便交叉參考。

● 附錄 A 「Windows DDE 名詞解釋」
● 附錄 B 「Windows DDE 參考資料」
● 附錄 C 「開一扇世界之窗 - 如何獲得 Windows 技術資料」
選錄兩篇文章,一是曾銘源先生原載於倚天雜誌的文章,介紹各種資料的獲得管道,包括 Compuserve,Internet,MSDN,Microsoft OnLine;另一篇是侯捷先生原刊載於微電腦傳真 (PC-Magazine 中文版) 的文章,介紹國外重要的 Windows 技術期刊與雜誌,包括 Microsoft Systems Journal、Dr. Dobb's Journal、PC Magazine、Windows/DOS Developer's Journal。

f315.jpg (13971 bytes)