什么是COM組件(轉)


所謂COM,英文為Componet Object Model,中文為組件對象模型(其實這種解釋只有在考試卷上才具有一點實際意義)。

【1】為什么需要COM?

COM是為了解決OLE問題而產生的。COM與OLE的關系類似於微積分與物理的問題。

實際上牛頓當年就是為了解決物理中的機械及動力學問題而發明微積分,后來微積分才作為一種有效的工具被用於其它學科之中。

《倚天屠龍記》中張無忌當初為了驅除身體中玄魔神掌的寒氣而學習九陽神功,其實他根本不曉得九陽神功隨后能幫他解決那么多棘手的問題。

【2】COM本質指什么?

COM本質是一種說明如何建立可動態互變組件的規范。這種規范提供了為保證能夠互操作,客戶和組件應遵循的二進制和網絡標准。

通過這種標准將可以在任意兩個組件之間進行通信而不用考慮其所處的操作環境是否相同、使用的開發語言是否一致以及是否運行於同一台計算機。

【3】COM規范的作用?

COM作用:提供一種獨立於平台與編程語言之外的,共享二進制代碼的方法。

在COM規范下將能夠以高度靈活的編程手段來開發、維護應用程序。

可以將一個單獨的復雜程序划分為多個獨立的模塊進行開發,這里的每一個獨立模塊都是一個自給自足的組件,可以采取不同的開發語言去設計每一個組件。

在運行時將這些組件通過接口組裝起來以形成所需要的應用程序。構成應用程序的每一個組件都可以在不影響其它組件的前提下被升級。

這里所說的組件是特指在二進制級別上進行集成和重用而能夠被獨立生產獲得和配置的軟件單元。

COM規范所描述的即是如何編寫組件,遵循COM標准的任何一個組件都是可以被用來組合成應用程序的。

至於組件采取的是何種編程語言則是無關緊要的,可以自由選取。

作為一個真正意義上的組件,應具備如下特征:

1. 實現了對開發語言的封裝。

2. 以二進制形式發布。

3. 能夠在不妨礙已有用戶的情況下被升級。

4. 在網絡上的位置必須能夠被透明的重新分配。

這些特征使COM組件具有很好的可重用性,這種可重用性與DLL一樣都是建立在二進制基礎上的代碼重用。但是,COM在多個方面的表現均要比DLL的重用方式好的多。

例如,在DLL中存在的函數重名問題、各編譯器對C++函數名稱修飾的不兼容問題、路徑問題以及與可執行程序的依賴性問題等在COM中通過使用虛函數表、查找注冊表等手段均被很好的解決。

其實COM組件在發布形式上本身就包擴DLL,只不過通過制訂復雜的COM規范,使COM本身的機制改變了重用的方法,能夠以一種新的方法來利用DLL並克服DLL本身所固有的一些缺陷,從而實現了更高層次的重用。

【4】COM中的基本元素有哪些?

(1) 接口:一個名字以大寫的I開頭的抽象基類,包含一組虛方法,接口可以從其它接口繼承,但不能繼承於多個接口,只能從一個接口繼承。

(2) coclass (Component Object Class,組件對象類,通常被稱為COM類): COM類通常就是一個C++類,這個類繼承自一個或者多個接口,並實現它們,COM對象在內存中的表現

就是這個COM類的一個實例。

(3)COM服務器: 包含了一個或者多個coclass的二進制DLLs或者EXE執行體。

(4)注冊(Registration): 創建注冊表入口的一個過程,告訴Windows操作系統COM服務器放在什么位置。

(5)取消注冊(Unregistration):從注冊表刪除這些注冊入口。

(6)GUID(諧音fluid,意思是全球唯一標示符Globally unique identifier): 是一個128位的數字,其實它和COM無關,在其他地方我們也經常看到它,只不過COM中的接口和coclass都

擁有一個GUID,因為是全球唯一的,所以避免了名稱沖突。

(7)UUID(universally unique identifier): 同GUID。

(8)CLSID(類ID): 是coclass的GUID。

(9)IID(接口ID): 是interface的GUID。

(10)HRESULT: 是一個代表着成功或錯誤代碼的整型或長整型的數字,對COM對象的調用經常會返回一個HRESULT,雖然用H開頭,但並不是句柄的意思。

(11)COM庫:操作系統的一部分,調用COM組件時就是COM庫在協助你完成調用。

 

總而言之,COM是為了功能模塊的重用。只不過重用的級別是二進制代碼,相比於STL是C++源碼級重用,其明顯更勝一籌。

 

文章原鏈接:https://blog.csdn.net/liujiayu2/article/details/45079093


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM