跳转到内容

组件对象模型

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Regionbbs留言 | 贡献2008年9月15日 (一) 10:52 相關技術编辑。这可能和当前版本存在着巨大的差异。

组件对象模型,也稱元件物件模型,英文为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+是DCOM的加強版本,以往DCOM規格上的MTS(Microsoft Transaction Server)以及MSMQ(Microsoft Queue Service)都被加到COM+中,成為目前微軟的企業級應用程式開發平台,而.NET Framework也提供System.EnterpriseServices.dll來與COM+保持互通的關係。

DCOM

DCOM 是可以在網路上通訊的COM元件,依據RPC(Remote Procedure Call)的規範來發展的,它將COM元件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓DCOM無法廣泛的流行。

.NET

.NET Framework 是新一代的Microsoft Windows應用程式開發平台。

参考