微軟軟體開發技術二十年回顧-COM、OLE、ActiveX及COM+篇

來源:互聯網
上載者:User

標籤:

本文摘自:http://www.job168.com/info/read_100394.html

      微軟的許多技術,如OLE、ActiveX、以及DirectX等都是基於COM技術而建立起來的。微軟本身也大量地使用COM組件來定製他們的應用程式及作業系統。那麼,什麼是COM呢?

  所謂COM即“元件物件模型”,是一種說明如何建立可動態互變組件的規範,此規範提供了為保證能夠互操作,客戶和組件應遵循的一些二進位和網路標準。通過這種標準將可以在任意兩個組件之間進行通訊而不用考慮其所處的作業環境是否相同、使用的開發語言是否一致以及是否運行於同一台電腦。開發COM的目的是為了使應用程式更易於定製、更為靈活。

  其實,COM不是以一個單獨的開發過程的一部分出現的。相反,它最初是以對象及嵌入系統的形式產生於Windows 3.0。我們知道,OLE 1允許一個應用程式(如WORD或EXCEL)可以不必開啟第二個應用程式就能顯示其它應用程式的資料。但OLE 1還存在兩個局限:

  ·首先是嵌入的資料不能被應用程式所編輯;

  ·其次,沒有標準化的系統用於存放嵌入的資訊。

  於是,出現了OLE 2,OLE 2是與WINDOWS 3.1一起推出的,它是第一個真正的COM技術,而OLE 1還不具備COM的各項特性—它使用的是另一種技術體系。OLE 2中產生了一種新的唯一的資料格式,稱為複合檔案。這種檔案中能夠包括所有OLE支援的應用程式的相關資訊,並在任一工作的應用程式中支援編輯、更新、列印等功能。

  但OLE 2仍然存在一些局限性,最為明顯的是任何時候要對一個嵌入的資料進行編輯都得重新開啟一個視窗。對這一點的改進,產生了OLE的一個新版本,稱為OLE自動化。該技術除了允許在調用資料的應用程式內部進行編輯(稱為內部編輯),還在OLE 2的基礎上加入了其它兩項與COM技術相關的改進;一是提供了非C++開發程式(如VB程式)接入COM功能的能力;二是支援存在於複合檔案以外的基於COM技術的組件的建立。Windows 3.11全面支援自動化技術。

  雖然,這最後一次的技術改進給COM帶來了最持久的衝擊,但是COM的OLE實現並仍然沒有實現Bill Gate先生的組件化軟體的夢想。隨之而來的另一技術革新卻通過從未想過的機制—VBX控制項使之變成了現實。VBX是Visual Baisc開發環境的一些內帶工具,最早由C++開發,後來卻都是用VB自己開發的。VBX是一類DLL應用程式,具有特殊的支援以便可以在VB系統中使用。在一年左右的時間內,VBX控制項的市場迅速發展成為一個幾百萬美元的產業,並帶動了VB產品的銷售。VBX具有兩項以前的Automation 伺服程式所不具備的重要性質:使用者介面和它與客戶(容器)的通訊能力。

  VBX的這種出乎意料的成功讓微軟決定讓COM工作群組在自動化基礎上增加等效於VBX的效能。這一開發過程的結果就是OCX控制項(是一種特殊的自動化DLL伺服器),它採用COM支援人員VBX控制項的所有功能,而且它從此升級為32位的控制項。可惜,在OCX尚未來得及普及以前,網際網路和Java的出現使它們被重新改造成了ActiveX控制項。

  當時,沒有誰會預料到Java和Internet會在WWW領域以氫彈的威力在電腦領域爆炸。微軟長期以來一直認為他們在PC機軟體領域的壟斷是無可挑戰的,但是Java和網頁瀏覽器伴隨著Internet,以一種全新的方式進入到個人微機的軟體領域,且該領域由Sun和Netscape控制而不是微軟。作為迎擊,COM變成了ActiveX,複合檔案變成了ActiveX檔案,OCX控制項變成了ActiveX控制項等等。基於COM的ActiveX組件均根據Internet的特點增加相應的新特徵,如保密安全效能、代碼短、資料支援非同步下載。同時,ActiveX組件還具有如下特點:

  ·ActiveX在Automation 伺服程式上增加了使用者介面;

  ·通用屬性和屬性頁面機制使ActiveX控制項的行為標準化;

  ·連接點機制支援從ActiveX控制項向容器發送事件;

  ·ActiveX的持久性解決了越時的狀態儲存問題。

  總之,OLE1、OLE2、OLE自動化、VBX控制項、OCX控制項、ActiveX以及COM+都是COM概念在Windows作業系統的各種實現方式。如今,COM已成為微軟產品系列的核心組成技術:

  ·Internet Explorer 4網路瀏覽器支援所有的ActiveX控制項,實際上它正是採用了一個ActiveX組件用於它的顯示介面;

  ·Windows 98這種新版的Windows作業系統將IE與作業系統捆綁在一起,它基於COM技術並支援活動案頭,使案頭組件具有網路應用的功能;

  ·Internet資訊服務器(IIS)是微軟加入網路伺服器大戰的重量級武器,IIS包括很多的功能強大的基於COM技術的系列內容,如Active Server Page,ISAPI擴充和ISAPI過濾器;

  ·微軟事務伺服器(MTS)是一種面向資料庫的系統,MTS採用COM技術以支援多種資料庫系統和售貨機的混合交易處理,並仿造非資料庫的執行方式,將事務的處理變成單步的行為,其結果可以為“成功”、“失敗”和“返回”而不會因為處理失敗而遺失資料;

  ·OLE DB推回到COM的OLE 2技術上,它採用與ODBC資料庫相同的技術,支援非資料庫應用程式與面向資料庫的技術(如MTS)共同工作。

  從另一方面看,最初,Windows是利用DLL在二進位級實現代碼共用的。這也是Windows程式啟動並執行關鍵——重用kernel32.dll,user32.dll等。但DLL是針對C介面而寫的,它們只能被C或理解C調用規範的語言使用。由程式設計語言來負責實現共用代碼,而不是由DLL本身。這樣的話,DLL的使用受到限制。儘管在後來,MFC又引入了另外一種MFC擴充DLL二進位共用機制,但它的使用仍受限制——只能在MFC程式中使用。

  COM通過定義二進位標準解決了這些問題,即COM明確指出二進位模組(DLL和EXE)必須被編譯成與指定的結構匹配。這個標準也確切地規定了在記憶體中如何組織COM對象。COM定義的二進位標準還必須獨立於任何程式設計語言(如C++中的命名修飾)。事實上,COM正是充分利用了Win32 DLL的靈活性才得以真正在Windows平台上實現的。COM的發布形式是:以win32動態連結程式庫(DLL)或者可執行檔(EXE)的形式發布的可執行程式碼群組成。

  注意,COM本身也要實現一個稱為COM庫的API,由該庫提供諸如客戶對組件的查詢,以及組件的註冊/反註冊等一系列服務。一般來說,COM庫由作業系統加以實現,程式員不必關心其實現細節。

  【注】DirectX技術

  要在Windows平台上進行遊戲開發必須瞭解兩個重量級遊戲API:DirectX和OpenGL。其中,DirectX是微軟開發的專門用於最佳化遊戲製作的API。DirectX由很多組件組成:DirectDraw、DirectSound、DirectMusic、DirectPlay、Direct3D、DirectInput、DirectSetup。它是允許你直接控制電腦硬體裝置的軟體,它比Windows GDI要快好幾倍,可用於不同的語言和多種平台,支援從繪製象素到進階3D映像,從播放簡單聲音到數字音樂,從鍵盤控制到反震手柄……幾乎為你的遊戲開發提供了所需的一切。注意,DirectX的基礎正是COM技術。

  什麼是COM+?

  必須明確,COM+並不是COM的簡單升級,但它的底層結構仍以COM為基礎,COM+綜合了COM、DCOM和MTS這些技術要素,把COM組件軟體提升到應用程式層而不再是底層的軟體結構,它通過作業系統的各種支援,使元件物件模型建立在應用程式層上,把所有組件的底層細節留給作業系統;因此,COM+與作業系統的結合更加緊密。3展示了COM+與MTS、COM/DCOM的關係。


  圖3.COM+與MTS、COM/DCOM的關係

  另一方面,COM+不再局限於COM的組件技術,它更加註重於分布式網路應用的設計和實現。COM+繼承了COM幾乎全部的優勢,同時又避免了COM實現中的一些不足,把COM、DCOM和MTS的編程模型有機地結合起來,繼承了它們的絕大多數特性,在原有的特性上增加了新的功能:

  ·真正的非同步通訊。

  ·事件服務。

  ·延展性。

  ·可管理和可配置性。

  ·易於開發。

  COM+標誌著微軟的組件技術達到了一個新的高度,它不再局限於一台機器上的案頭系統,而是把目標指向了更為廣闊的企業內部網,甚至國際互連網。COM+與多層結構模型(Windows DNA結構,詳見下一節)以及Windows作業系統為公司專屬應用程式或Web應用提供了一套完整的解決方案。

  【問題】.NET時代,COM是否會消失?

  不會。其實,.NET只不過是COM的別名而已。對於一個經驗豐富的C++程式員而言,.NET就是COM的進化,而微軟內部.NET可以說是“COM 3.0”。其實,CLR就是一個不折不扣的COM對象。但是,請注意,.NET使用一種不同的方法來編寫組件,這樣.NET組件與原先的COM組件存在明顯的不同。.NET組件不需要使用註冊表和類型庫,因為所有關於組件的資訊都以中繼資料的形式包含在程式集(Assembly)中。但是,藉助於一個稱為COM Interop的工具,COM對象和.NET對象可以很好地協作:通過提供軟體包類,.NET對象可以訪問COM對象;通過提供所有的登錄機碼和COM對象構建機制,COM對象可以訪問.NET對象。

微軟軟體開發技術二十年回顧-COM、OLE、ActiveX及COM+篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.