首頁>Club>
110
回覆列表
  • 1 # 使用者4519222332001

    所謂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伺服器放在什麼位置。

    (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++原始碼級重用,其明顯更勝一籌。

  • 中秋節和大豐收的關聯?
  • 華為手機設成動態桌布為什麼不動?