平台介紹
COM是微軟自1993年便提出的組件式軟體平台,用來做進程間通信(Inter-process communication, IPC)以及當作組件式軟體開發的平台。COM提供跟程式語言無關的方法實現一個軟體對象,因此可以在其他環境中運行。COM要求軟體組件必須遵照一個共同的接口,該接口與實現無關,因此可以隱藏實現屬性,並且被其他對象在不知道其內部實現的情形下正確的使用。
COM並被實現於多個平台之上,並不限於Windows作業系統之上。但還是只有Windows最常使用COM,且某些功能已被目前的.NET平台取代。
歷史
Windows 作業系統提供了三種套用程式間的通訊機制:剪貼簿(clipboard)、DDE與OLE。OLE原名是物件連結與嵌入(Object Linking and Embedding),OLE可說是DDE的改良版,OLE 1.0版提供複合檔案(compound document)處理。但過於複雜,Brockschmidt, Kraig「Inside OLE」一書中提到,必須經過六個月的心靈混沌期,才能了解OLE是什麼。因此OLE 2.0後,微軟提出COM架構。所有OLE元件皆是繼承COM而來,這些技術包含OLE Document和OLE Controls、Drag and Drop等。
組件類型
COM是基於組件對象方式概念來設計的,在基礎中,至少要讓每個組件都可以支持二個功能:
•查詢組件中有哪些界面
•讓組件做自我生命管理,此概念的實踐即為引用計數(Reference Counting)
這二個功能即為COM的根:IUnknown接口所提供的IUnknown::QueryInterface(),IUnknown::AddRef()及IUnknown::Release()三個方法的由來。所有的COM組件都要實現IUnknown,表示每個COM組件都有相同的能力。
只由COM派生實現出來的組件,稱為 純COM組件。
但在Windows持續發展時,Visual Basic 4.0開始支持OCX,也就是OLE Custom Control,這讓微軟開始思考要如何讓COM組件可以跨語言支持,在這樣的要求下,必須要提供一個一致的接口,以及提供一組可以調用接口內方法的能力,由於純COM組件只能夠支持C/C++的直接訪問,為了要達到跨語言的能力,在COM中必須要支持在外部調用內部方法的機能,這個機能造就了Invoke()方法,另外為了跨語言的支持,COM應該要提供簡單的組件訪問識別方式,這也就是會有GetIDsOfNames()的原因,將這些方法組合起來,定義出的必要接口,稱為IDispatch接口,所有實現此接口的,都可以支持跨語言的支持。
微軟將實現此接口的組件都稱為 自動化(Automation)組件。
相關技術
COM曾是Windows平台下主要的軟體開發平台,並且影響至其他許多相關軟體技術。
COM+
COM+是微軟Windows 2000中,Microsoft Transaction Server的強化實現版本,除了提供基本的組件交易支持外,還提供了鬆散藕合式事件(loosely-coupled events)與對象共用池(object pooling)等應用程式伺服器的能力,成為Windows 2000開始在微軟平台上主要的應用程式伺服器平台,目前.NET Framework也提供了System.EnterpriseServices命名空間以支持COM+。
Distributed COM
Distributed COM是可以在網路上通信的COM組件,依據RPC(Remote Procedure Call)的規範來發展的,它將COM組件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓設備上下文OM無法廣泛的流行。
.NET
.NET Framework是新一代的Microsoft Windows應用程式開發平台。