元件物件模型[編輯]
自動化是指應用程式的COM化來讓外部可以呼叫它們的功能,以及外部呼叫這些功能的方法。自動化的典
型應用是微軟的很多軟體中都支援的巨集。由於自動化普遍使用OLE的標準介面來實作,所以這個技術有
時也稱OLE自動化。
型應用是微軟的很多軟體中都支援的巨集。由於自動化普遍使用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等。
件連結與嵌入(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提供跟程式語言無關的方法實作一個軟體物件,因此可以在其他環
境中執行。COM要求軟體元件必須遵照一個共同的介面,該介面與實作無關,因此可以隱藏實作內容,並
且被其他物件在不知道其內部實作的情形下正確的使用。
COM並被實作於多個平台之上,並不限於Windows作業系統之上。但還是只有Windows最常使用COM,且
某些功能已被目前的.NET平台取代。
某些功能已被目前的.NET平台取代。
COM元件類型[編輯]
COM是基於元件物件方式概念來設計的,在基礎中,至少要讓每個元件都可以支援二個功能:
- 查詢元件中有哪些介面
- 讓元件做自我生命管理,此概念的實踐即為參照計數(Reference Counting)
這二個功能即為COM的根:
表示每個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中必須要支援在外部呼叫內部方法的機能,這個機能造就了
COM應該要提供簡單的元件存取識別方式,這也就是會有
來,定義出的必要介面,稱為
考要如何讓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+。
支援外,還提供了鬆散藕合式事件(loosely-coupled events)與物件共用池(object pooling)等應用程式
伺服器的能力,成為Windows 2000開始在微軟平台上主要的應用程式伺服器平台,目前.NET Framework
也提供了System.EnterpriseServices命名空間以支援COM+。
沒有留言:
張貼留言