書本簡介
書本簡介
書 名:完全剖析COM
出版日期:2000/3/15
書 號:957-0312-29-7
I S B N:957-0312-29-7
原 作 者:Dale Rogerson
譯 者:黃昕暐
書本簡介
章節目錄
譯者序 -從絢爛回歸樸實
校閱者序
致謝
簡介
. 必備條件
. C++
. 書中的範例
. 支援
1. 元件(Component)
. 元件的優點
. 使用元件的先決條件
. COM
. 元件結論
2. 介面(Interface)
. 處處聞介面
. 實作COM介面
. 介面的理論(續篇)
. 介面背後的秘密
. 總結:建構程式的積木
3. QueryInterface
. 詢問所需要的介面
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Index.htm[2012/7/25 下午 06:37:44]
書本簡介
. QueryInterface原則與定律
. 如果用戶端程式可以從某個介面取得特定介面,那麼就可以從任何一個介面取得該介面
. QueryInterface定義了整個元件
. 新版本元件的管理
. 共識契約(Implicit Contract)
. 您是有腳的動物嗎?..開玩笑的!
4. 參用計數(Reference Counting)
. 生命期的控制
. 參用計數概述
. 使用參用計數的時機
. 消防隊員的外套,本章總結
5. 動態連結
. 元件的誕生
. 切割單一程式
. 元件運動大會
. 本章總結:缺乏彈性的元件產生方式
6. HRESULT、GUID、登錄資料庫以及其他細節
. HRESULT
. GUID
. Windows系統的登錄資料庫(Registry)
. COM程式庫函式概觀
7. 類別工廠(Class Factory)
. CoCreateInstance函式
. 類別工廠(class factory)
. 實作類別工廠
. 包含多個元件的DLL
. DLL的釋放(Unload)
. 總結
8. 元件的重複利用:包含與聚合
. 包含與聚合
. 聚合關係的實作
. 完整的範例
. 真實世界裡的聚合與包含
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Index.htm[2012/7/25 下午 06:37:44]
書本簡介
. 總結
9. 讓自己更輕鬆
. 用戶端程式的簡化
. 伺服器端的簡化方法
10. 實作在EXE中的伺服器
. 不同的行程
. IDL/MIDL簡介
. 本地端伺服器的實作
. LockServer函式的修改
. 來趟遠足吧-遠端伺服器
. DCOMCNFG.EXE動了什麼手腳?
. 摘要
11. Dispatch介面與自動化(Automation)機制
. 新的溝通方式
. 使用IDispatch介面
. BSTR資料型別
. 型別庫(Type Library)
. 實作IDispatch介面
. 今天想做什麼?
12. 多執行緒(Thread)
. COM的執行緒模式
. 寓所執行緒模式實作解析
. 寓所式執行緒範例步步追蹤
. 自由執行緒模式範例演練
. 與執行緒有關的登錄資料庫機碼
. 本章總結
13. 綜合大演練
. 七巧板(Tangram)程式
. 用戶端程式
. 技巧大展
. IDL檔
. 循環式參用計數
. 事件跟連接點(Connection Point)
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Index.htm[2012/7/25 下午 06:37:44]
書本簡介
. COM的一切就是標準的介面
. 呼!苦難終於過了
參考書籍
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Index.htm[2012/7/25 下午 06:37:44]
譯者序
譯者序 -從絢爛回歸樸實
相信許多人都和我一樣,家裡的書櫃上擺了一本Inside OLE哲學書!稱這本書為哲學書,一點也不為過,我自己苦心專研,總還是
不免捶手頓足,最後也不過看到第四章沒完!而這第四章又是什麼呢?就是這一本書的主題:Component Object Model。
我想,學習OLE(喔,對不起,我總是趕不上時代,雖然大家都已經稱呼它為ActiveX,但我還是比較喜歡OLE,也許比較念舊吧)
沒有捷徑,當然,要苦K Inside OLE我並不反對,但您需要絕對的勇氣與無比的毅力!如果受不了誘惑,想要21天學會OLE,打死
我都不相信!甚至來個重金屬學習OLE,由於包了美氟寶(我是說MFC啦)在外面,很難看的清楚裡面的一舉一動。我認為,要學
習OLE,一定得要回到最根本,也就是從最基本的COM學起。有了深厚的內功打底,再去與龐大的OLE搏鬥,勝算就高些了。
因此,我一直在等待有一本好的書,可以在COM上多所著墨,盼呀盼的終於,在Inside系列裡等出了一本Inside COM!幾百頁的內
容,完完全全在講COM,誠如原作者在最後一章所說,看完這本書,您就已經是位COM專家了!事實上,我也常常跟別人說,大概
五年內都不會有人肯下這樣的苦心寫一本類似的書,因此,錯過了這本,您只好再回頭去苦K哲學類的Inside COM了。
也正因為以上的原因,我自己一直覺得這本書絕對不能做爛,否則就白白糟蹋了一本好書!為此,我自己另外又再找了一位在業界
服務多年的徐銘志先生,幫我做技術校稿的工作。其實這也是我一直所希望能夠採用的書籍撰寫模式,不論是翻譯或是著作,都應
該要有除了作者以外的編輯人員完全看過,以便能夠將書籍中錯誤的觀念以及不適當的用詞挑出來,好好的再加以修整才對。因
此,這本譯本的完成,徐先生佔了極大的功勞,不能免俗地要在這裡大聲地謝謝他!
最後,對於已經將這本書拿在手上要開始閱讀的讀者,有幾個建議請各位讀者參考。首先,雖然這本書和許多書一樣,都說讀者並
不需要很深厚的C++ 功力,不過我總是認為這樣的話勉勵的成份居多,我建議大家看這本書的時候,可以同時備妥像是The C++
Programming Language、ARM、或者是Thinking in C++ 這類的書(抱歉,我不能把所有C++ 的好書通通列出來,您可以挑您最喜
愛的,但深度一定要夠),以便能夠搞的清楚書中會使用到的C++ 觀念!另外,由於原作者並不會針對範例程式一行一行跟您解
說,因此,我強烈建議您把光碟上所附的原始程式跟著書本一行一行檢視,以便能夠將書裡對於範例的片段解釋連貫起來。我想,
原作者寫了本好書,身為讀者的我們下點苦工,也是應該的,對吧!
好了,不打攪各位,先預祝各位能夠練成這套入門心法,撬開ActiveX大門!
黃昕暐
mee@indexmare.com
http://mee.indexmare.com
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Translate.htm[2012/7/25 下午 06:37:57]
校閱者序
校閱者序
首先,你會懷疑學習COM的必要性。目前已經有一些發展工具,讓你可以輕輕鬆鬆地製作和使用元件,犯不著硬著頭皮往COM猛
鑽,不是嗎?是的,基於商業考量,老闆們也不希望你從無到有發展一個元件。但是身為一個元件的發展或使用者,如果不了解這
些元件的內部到底做了些甚麼事,您能放心嗎?就好比學習MFC而沒有深固的SDK基礎,無疑是在沙洲上築高塔,怎能不令人擔
憂!再者,當這些高階的發展工具無法達成你的需求時,又該如何是好?別以為這種情況不會發生,至少到目前為止,元件的多執
行緒問題,還是得靠程式師對COM的深入了解才能解決。
接觸OLE二年有餘,也利用OLE的技術開發了一些產品。回憶起學習OLE的過程,最遺憾的莫過於缺乏一本真正從根本談起的好
書,當時手邊只有一些參考手冊和一本完整但難以消化的Inside OLE 2(現已改版為Inside OLE)。值得慶幸的是,現在,這一
本Inside COM正是從最根本的COM談起,暫時讓你免去面對那些OLE加在COM身上的分枝旁節。另外一個重點是,範例程式寫得
妙,仔細品味每一章的範例程式,作者的用心處處可見。
黃昕暐是一個擁有特「譯」功能的傢伙,對於他的譯筆,無從挑剔。技術編輯?別誤會,我的文字功夫絕對無法與他相提並論,那
麼身為技術編輯應該做些甚麼呢?難道不是挑錯字、修飾文句或寫幾句「編按:……」嗎?其實技術編輯的首要任務是維護書本內
容在於技術方面的正確性,而不只是做一些「文字編輯」的工作。這話說得有些嚴重,希望不會得罪太多人。
學習OLE是一條荊棘密佈的長路,身處這條路上,你看不到前面的路還有多遠,也不能去想已經走過的路有多長,唯一能做的是站
穩每一個腳步、面對每一個困難,希望這本書可以幫助你走得更快、更穩。
徐銘志 謹識
textar@ms13.hinet.net
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Front.htm[2012/7/25 下午 06:38:04]
致謝
致謝
當我還在喬治亞理工學院的時候,我的研究生室友常常拿他們撰寫學術文章所得到的功勞(或者說得不到甚麼功勞)開玩笑。這些
文章的呈現方式通常都會在封面列上三個名字,其中第一個是指導教授的名字,然後是另外一位與完成這篇文章完全無關、但卻不
得不列出來的教授的名字,最後才是完成所有工作的學生名字,而且這名字看起來還像是事後想起來再補上去的一樣。這本書的狀
況就截然不同了,封面只有一個人的名字,就是我,然而背後卻因為一大群人的努力,才得以讓這本書完成!這些人的名字其實都
該放在封面才對。
首先,如果不是Nigel Thompson,我根本不會開始寫這本書。他在開發人員的圈子中發現了一本專門講COM的書籍的需求,並且鼓
勵我來撰寫這樣的書。而Nancy Cluts總是在我腸枯思竭的艱苦時候帶給我一些鼓舞人心的話語。當我寫出來的文字不是頂好的時
候,Nigel以及Nancy總是以最開誠的心胸給我建議,讓我能夠把這本書寫的更好些。
Kraig Brockschmidt以及Craig Wittenberg在這本書逐漸成形的階段,給了我不少指引方針,除此之外,他們兩位也在技術上給我不
少必要的鼓勵與意見。
雖然寫文章本身是件個人的工作,不過要變本書出來可就得依賴一組優秀的團隊,而我就這麼幸運的遇上了一組夢幻隊
伍!Microsoft Press的一些人一開始並不認為值得去出版一本專門講COM的書,但Eric Stroo說服了他們。Kathleen Atkins則在專
案編輯的角色上扮演得相當出色,她不但管理了整個專案的進行,也把我的文字提昇到散文的境界,如果這還不夠讓您驚訝的話,
我還得告訴您用在每一章開頭的照片也都是她拍的。Pam Hidaka幫這本書做了相當酷的設計,而Michael Victor在圖形效果上也有相
當棒的貢獻,包括了伴隨著照片出現的七巧板圖案也都是他的傑作。Gary Nelson這位技術編輯真是沒話說,盡職的檢驗書中每一個
技術上的細節,不論是多麼平凡或是奇特的地方,他都不放過。Shawn Peck對於最後的定稿貢獻良多,同時也對Kathleen以
及Gary沒有發現到的錯誤補上最後的修正。
除此之外,我也要謝謝所有閱讀以及審視這本書初稿的朋友:Mary Kirkland、Mark Kramer、John Thorson、Tim Bragg、Vinoo
Cherian、Charley Kindel、Jerry Noll、以及Kirk Goddard。
我還要謝謝Microsoft Developer Studio團隊的同事,他們允許我在週末趕回家寫這本書,特別要謝謝Martyn Lovell花時間和我討論
技術上的許多課題。
另外,如果不是我在Microsoft Developer Network所學到的寶貴經驗,我也不會有機會撰寫這本書。在MSDN我瞭解到一位好編輯
的重要性,而幸運的我也遇到了一位,他就是Handan Selamoglu,他也把我訓練成一位優秀的編輯。
最後,我得謝謝我的朋友與家人,他們在我的人生中佔著相當重要的地位。首先得向Peter Lancaster與Paul Schuster說聲抱歉,因
為這本書的忙碌所以今年沒去泛舟,明年再來!另外,也要謝謝我的姊姊,她總是在身邊支持我。我也要謝謝我的父母,當年的第
一部Radio Shack TRS-80電腦就是他們買的。Sarah,謝謝你,這一年你好像失去了男友一樣!
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Thanks.htm[2012/7/25 下午 06:38:09]
簡介
簡介
您是否希望能夠在軟體上市之後還可以持續修改、甚至於加上新的功能呢?您是不是期望能夠以慢慢一點一點加入新功能的方式來
發展軟體、而不必為了改版每兩年就得重新撰寫一次呢?您是不是也希望所製作的軟體可以讓使用者輕易地自訂功能、或者讓您的
軟體更具彈性、更容易動態變換功能呢?您是否想要加快應用程式的發展時程呢?您是不是奢望您的應用程式可以輕易地在分散式
的環境上正常執行呢?
您對使用元件來開發程式有興趣嗎?您希望將整個程式切割成多個元件嗎?您想學習COM嗎?您想學習(OLE)自動化機制
(Automation)嗎?您想突破學習OLE時的難關嗎?您認為COM或是OLE很難嗎?您想瞭解軟體巨人微軟一些新技術,像
是ActiveX、DirectX、以及OLE等等的基礎理論嗎?您想要自訂或是延伸微軟應用程式或是作業系統的功能嗎?
如果對於以上任何一個問題您的答案是「是」的話,那麼這本書您就選對了!所有這些問題通通都卡在一個關鍵,也就是微軟的元
件式物件模式(Component Object Model),通常大家都稱之為COM。而這本書就要告訴您如何利用C++ 語言來發展您自己
的COM元件。
COM是一種發展軟體元件的方法,所謂的軟體元件,就是指一個可以提供應用程式、作業系統、以及其他元件特定服務的二進位可
執行程式。事實上,發展自訂的COM元件就好像是在建構一套動態的物件導向API一樣!您可以在程式的執行時期隨意拼上或是移
除所需要的元件,完全不需要重新編譯或是連結整個程式,就可以立即運作。這樣的技術也正是微軟之所以能夠發
展ActiveX、DirectX、以及OLE等等技術的基石,微軟的發展人員也運用了COM技術來自訂應用程式以及作業系統的功能。
必備條件
這本書主要的對像是中等程度的C++ 程式師,而且必須有一些Win32程式設計的經驗。不過如果您是C++ 的初學者,倒也無妨,因
為利用C++ 來製作COM元件並不需要多高深的C++ 技巧。在利用C++ 製作COM元件時,所需要的觀念裡面最難的恐怕就是多重繼
承了,而就算是這樣,在書中也都會針對相關細節做詳細的解說。事實上,反過來講,初學C++ 的人透過這本書學習COM程式設計
還有個好處,就是可以養成良好的程式設計習慣呢!不過話說回來,如果您能夠看看其他C++ 的入門書,也會有相當大的幫助。
如果您對於Windows程式設計有豐富經驗,那也不錯,只不過這並不是閱讀本書的必要條件!我也盡量避免用到一些跟Windows系
統相關的程式碼,所以即使您是UNIX用戶,應該也可以很順利地理解書中的程式。當然啦,Windows程式師在一些製作Windows應
用程式相關的工具上會比較熟悉,這是唯一比非Windows程式師佔優勢的地方。
至於Microsoft Foundation Class這套程式庫(MFC)也一樣不需要,以製作COM元件來說,使用MFC並沒有什麼好處,因此除了
最後一章以外,所有的範例都完全不會用到MFC,請大家放心。
歡迎非Windows程式師進入COM的世界
如果您是在UNIX、麥金塔、Linux、VMS、或是其他作業系統上的軟體發展人員,那麼閱讀這一本書也一樣可以得到許多啟發。事
實上,從COM所散發的概念並不是只能用在Windows系統上,因為COM並不是一組龐大的API,而是像結構化程式設計或是物件導
向程式設計一樣,是一種程式設計的方法,您可以在各種作業系統上運用這種「COM的風格」!當然啦,在Windows上要運用這種
file:///C|/Users/cash_chang/Dropbox/Data/work/Win Programming/ebook/完全剖析COM/html/Brief.htm[2012/7/25 下午 06:38:14]