COM编程概述
所謂COM,英文為Componet Object Model,中文為組件對象模型(其實這種解釋只有在考試卷上才具有一點實際意義)。
【1】為什么需要COM?
COM是為了解決OLE問題而產(chǎn)生的。COM與OLE的關(guān)系類似于微積分與物理的問題。
實際上牛頓當(dāng)年就是為了解決物理中的機械及動力學(xué)問題而發(fā)明微積分,后來微積分才作為一種有效的工具被用于其它學(xué)科之中。
《倚天屠龍記》中張無忌當(dāng)初為了驅(qū)除身體中玄魔神掌的寒氣而學(xué)習(xí)九陽神功,其實他根本不曉得九陽神功隨后能幫他解決那么多棘手的問題。
【2】COM本質(zhì)指什么?
COM本質(zhì)是一種說明如何建立可動態(tài)互變組件的規(guī)范。這種規(guī)范提供了為保證能夠互操作,客戶和組件應(yīng)遵循的二進制和網(wǎng)絡(luò)標(biāo)準(zhǔn)。
通過這種標(biāo)準(zhǔn)將可以在任意兩個組件之間進行通信而不用考慮其所處的操作環(huán)境是否相同、使用的開發(fā)語言是否一致以及是否運行于同一臺計算機。
【3】COM規(guī)范的作用?
COM作用:提供一種獨立于平臺與編程語言之外的,共享二進制代碼的方法。
在COM規(guī)范下將能夠以高度靈活的編程手段來開發(fā)、維護應(yīng)用程序。
可以將一個單獨的復(fù)雜程序劃分為多個獨立的模塊進行開發(fā),這里的每一個獨立模塊都是一個自給自足的組件,可以采取不同的開發(fā)語言去設(shè)計每一個組件。
在運行時將這些組件通過接口組裝起來以形成所需要的應(yīng)用程序。構(gòu)成應(yīng)用程序的每一個組件都可以在不影響其它組件的前提下被升級。
這里所說的組件是特指在二進制級別上進行集成和重用而能夠被獨立生產(chǎn)獲得和配置的軟件單元。
COM規(guī)范所描述的即是如何編寫組件,遵循COM標(biāo)準(zhǔn)的任何一個組件都是可以被用來組合成應(yīng)用程序的。
至于組件采取的是何種編程語言則是無關(guān)緊要的,可以自由選取。
作為一個真正意義上的組件,應(yīng)具備如下特征:
1. 實現(xiàn)了對開發(fā)語言的封裝。
2. 以二進制形式發(fā)布。
3. 能夠在不妨礙已有用戶的情況下被升級。
4. 在網(wǎng)絡(luò)上的位置必須能夠被透明的重新分配。
這些特征使COM組件具有很好的可重用性,這種可重用性與DLL一樣都是建立在二進制基礎(chǔ)上的代碼重用。但是,COM在多個方面的表現(xiàn)均要比DLL的重用方式好的多。
例如,在DLL中存在的函數(shù)重名問題、各編譯器對C++函數(shù)名稱修飾的不兼容問題、路徑問題以及與可執(zhí)行程序的依賴性問題等在COM中通過使用虛函數(shù)表、查找注冊表等手段均被很好的解決。
其實COM組件在發(fā)布形式上本身就包擴DLL,只不過通過制訂復(fù)雜的COM規(guī)范,使COM本身的機制改變了重用的方法,能夠以一種新的方法來利用DLL并克服DLL本身所固有的一些缺陷,從而實現(xiàn)了更高層次的重用。
【4】COM中的基本元素有哪些?
(1) 接口:一個名字以大寫的I開頭的抽象基類,包含一組虛方法,接口可以從其它接口繼承,但不能繼承于多個接口,只能從一個接口繼承。
(2) coclass (Component Object Class,組件對象類,通常被稱為COM類): COM類通常就是一個C++類,這個類繼承自一個或者多個接口,并實現(xiàn)它們,COM對象在內(nèi)存中的表現(xiàn)
就是這個COM類的一個實例。
(3)COM服務(wù)器: 包含了一個或者多個coclass的二進制DLLs或者EXE執(zhí)行體。
(4)注冊(Registration): 創(chuàng)建注冊表入口的一個過程,告訴Windows操作系統(tǒng)COM服務(wù)器放在什么位置。
(5)取消注冊(Unregistration):從注冊表刪除這些注冊入口。
(6)GUID(諧音fluid,意思是全球唯一標(biāo)示符Globally unique identifier): 是一個128位的數(shù)字,其實它和COM無關(guān),在其他地方我們也經(jīng)常看到它,只不過COM中的接口和coclass都
擁有一個GUID,因為是全球唯一的,所以避免了名稱沖突。
(7)UUID(universally unique identifier): 同GUID。
(8)CLSID(類ID): 是coclass的GUID。
(9)IID(接口ID): 是interface的GUID。
(10)HRESULT: 是一個代表著成功或錯誤代碼的整型或長整型的數(shù)字,對COM對象的調(diào)用經(jīng)常會返回一個HRESULT,雖然用H開頭,但并不是句柄的意思。
(11)COM庫:操作系統(tǒng)的一部分,調(diào)用COM組件時就是COM庫在協(xié)助你完成調(diào)用。
?
總而言之,COM是為了功能模塊的重用。只不過重用的級別是二進制代碼,相比于STL是C++源碼級重用,其明顯更勝一籌。
?
Good Good Study, Day Day Up.
順序 ?選擇 ?循環(huán) ?總結(jié)
總結(jié)
- 上一篇: 2_1 AdpterMode.cpp 适
- 下一篇: COM编程之一 组件