组件对象模型
维基百科,自由的百科全书
组件对象模型,也稱元件物件模型,英文为Component Object Model,縮寫COM,是微軟對於網頁伺服器與客戶端、增益集與Office系列软件之間互動的一項軟體元件技術。
自動化是指应用程序的COM化来让外部可以调用它們的功能,以及外部调用这些功能的方法。自动化的典型应用是微软的很多软件中都支持的巨集。由于自动化普遍使用OLE的标准接口来实现,所以這個技術有时也稱OLE自动化。
目录 |
[编辑] 歷史
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是微軟自1993年便提出的元件式軟體平台,用來做行程間通訊(Inter-process communication, IPC)以及當作元件式軟體開發的平台。COM提供跟程式語言無關的方法實作一個軟體物件,因此可以在其他環境中執行。COM並要求某個軟體元件必須遵照一個共同的接口,該接口與实现無關,因此可以隱藏实现內容,並且被其他物件在不知道其內部实现的情形下正確的使用。
COM並被實作於多個平台之上,並不限於Windows作業系統之上。但還是只有Windows最常使用COM,且某些功能已被目前的.NET平台取代。
[编辑] COM 元件類型
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+。
[编辑] DCOM
DCOM 是可以在網路上通訊的COM元件,依據RPC(Remote Procedure Call)的規範來發展的,它將COM元件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓DCOM無法廣泛的流行。
[编辑] .NET
.NET Framework 是新一代的Microsoft Windows應用程式開發平台。

