COM、ActiveX、OLE的聯系和區別
這三者都是微軟上世紀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的聯系和區別