1. 程式人生 > >COM、ActiveX、OLE的聯系和區別

COM、ActiveX、OLE的聯系和區別

多版本 使用 stdcall 需求 std 如果 是你 目錄 協作

這三者都是微軟上世紀90年代提出的技術,不僅至今仍在使用,其設計思路對今天的軟件架構仍有著很大的參考意義。

從出現的歷史來看,OLE最早出現,然後COM,然後ActiveX。

最早是應復合文檔的需求,OLE(Object Linking and Embedded)出現了,典型應用是Word文檔中可以插入的圖片,在Word中就可以編輯。

微軟的工程師,把OLE中的通用代碼提取出來,作為一種基礎技術,並廣泛使用,這樣COM技術的出現了。與OLE不同的是,COM是作為一項通用技術,而不是產品應用。

隨著互聯網的發展,要求網頁有更豐富的表現形式,HTML和CGI有些吃力,前者缺靈活,後者開發門檻高。ActiveX應時而生,填補了需求。典型應用就是IE瀏覽器中的所謂的加密密碼輸入框,來實現數據以加密的方式傳送到服務器。

從技術層次上講,ActiveX和OLE一樣,是COM技術的落地應用。

OLE是基於COM技術的,雖然前者先於後者出現。也可以說COM技術是OLE發展過程中,技術總結然後上升到理論層次。

ActiveX也是基於COM技術,比如COM技術定義了接口,ActiveX使用了此定義,約定了一批符合COM接口約定的ActiveX接口。

OLE和ActiveX都是基於COM技術,前者起身於復合文檔,後者行走於互聯網,他們的接口因為領域不同而有所差異,但都復合COM標準。

OLE和ActiveX都是Microsoft的商標,但COM不是,它只是一項技術。

其實,基於COM技術的,不僅僅是OLE和ActiveX。DirectX也是基於COM,典型代表是廣泛應用於播放器的DirectShow技術。

從動態鏈接庫出現的那天開始,win下的DLL文件和Linux的so文件,一下子把應用程序的開發簡化了,多人協作更容易了。

為方便不同編程語言互相協作,win系統的DLL一律使用stdcall調用約定,也就是PASCAL約定,終於不用每個程序員都必須用某一種語言了。

面向對象語言,簡化了編程工作中維護代碼的繁瑣,一些團隊內部開始使用C++對象在DLL之間傳送,其它語言沒法用,甚至不同的C++編譯器不能通用,標準化的需求又來了。

COM技術開始出現,它不再傳遞對象,而只傳遞接口,每個接口都有最低的基本要求,因為可以跨語言,這使得面向對象可以在跨模塊之間,用的更廣泛。

當微軟開始推廣它的DotNet技術時,一個理由是,DLL有很多版本,exe程序不知道用哪個好。其實COM設計之初考慮到了這個問題,就是你升級了要換接口ID,舊接口要保留除非沒有必要,但是很多用戶不care的。

於是,DotNet中,微軟用文件名和版本號共同維護DLL,還規劃了不同的目錄命名規則,這時候,如果你不知道第三方提供的exe用的那個版本,可以選擇把所有的版本都裝上,微軟有一套規則保證他們可以相安無事的共存。

於是,微軟覺得自己解決了一個難題,空間換運行,反正硬盤都是幾個T的,內存都是好多G的。

COM、ActiveX、OLE的聯系和區別