<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走在架構師的大道上 Jack.Wang's home

    Java, C++, linux c, C#.net 技術,軟件架構,領域建模,IT 項目管理 Dict.CN 在線詞典, 英語學習, 在線翻譯

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks

    熟悉面向對象編程和網絡編程的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什么樣的關系,對許多們還是比較模糊的。在具體介紹它們的關系之間,我們還是先明確組件(Component)和對象(Object)之間的區別。組件是一個可重用的模塊,它是由一組處理過程、數據封裝和用戶接口組成的業務對象(Rules Object)。組件看起來像對象,但不符合對象的學術定義。它們的主要區別是: 1)組件可以在另一個稱為容器(有時也稱為承載者或宿主)的應用程序中使用,也可以作為獨立過程使用; 2)組件可以由一個類構成,也可以由多個類組成,或者是一個完整的應用程序; 3)組件為模塊重用,而對象為代碼重用。現在,比較流行的組件模型有COM(Component Objiect Module,對象組件模型)/DCOM( Distributed COM,分布式對象組件模型)和CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構)。到這里,已經出現了與本文相關的主題COM,而CORBA與本文無關,就不作介紹。之所以從組件與對象的區別說起,是想讓大家明確COM和 CORBA是處在整個體系結構的最底層,如果暫時對此還不能理解,不妨繼續往下看,最后在回過頭看一看就自然明白了。現在開始闡述ActiveX、OLE和COM的關系。首先,讓大家有一個總體的概念,從時間的角度講,OLE是最早出現的,然后是COM和ActiveX;從體系結構角度講,OLE和ActiveX是建立在 COM之上的,所以COM是基礎;單從名稱角度講,OLE、ActiveX是兩個商標名稱,而COM則是一個純技術名詞,這也是大家更多的聽說ActiveX和OLE的原因。既然OLE是最早出現的,那么就從OLE說起,自從Windows操作系統流行以來,“剪貼板”( Clipboard)首先解決了不同程序間的通信問題(由剪貼板作為數據交換中心,進行復制、粘貼的操作),但是剪貼板傳遞的都是“死”數據,應用程序開發者得自行編寫、解析數據格式的代碼,于是動態數據交換(Dynamic Data Exchange,DDE)的通信協定應運而生,它可以讓應用程序之間自動獲取彼此的最新數據,但是,解決彼此之間的“數據格式”轉換仍然是程序員沉重的負擔。對象的鏈接與嵌入(Object Linking and Embedded,OLE)的誕生把原來應用程序的數據交換提高到“對象交換”,這樣程序間不但獲得數據也同樣獲得彼此的應用程序對象,并且可以直接使用彼此的數據內容,其實OLE是Microsoft的復合文檔技術,它的最初版本只是瞄準復合文檔,但在后續版本OLE2中,導入了COM。由此可見,COM是應OLE的需求而誕生的,所以雖然COM是OLE的基礎,但OLE的產生卻在COM之前。 COM的基本出發點是,讓某個軟件通過一個通用的機構為另一個軟件提供服務。COM是應OLE 的需求而誕生,但它的第一個使用者卻是OLE2,所以COM與復合文檔間并沒有多大的關系,實際上,后來COM就作為與復合文檔完全無關的技術,開始被廣泛應用。這樣一來, Microsoft就開始“染指”通用平臺技術。但是COM并不是產品,它需要一個商標名稱。而那時Microsoft的市場專家們已經選用了OLE作為商標名稱,所以使用COM技術的都開始貼上了 OLE的標簽。雖然這些技術中的絕大多數與復合文檔沒有關系。Microsoft的這一做法讓人產生這樣一個誤解OLE是僅指復合文檔呢?還是不單單指復合文檔?其實OLE是COM的商標名稱,自然不僅僅指復合文檔。但Microsoft自己恐怕無法解釋清楚,這要花費相當的精力和時間。 于是,隨著Internet的發展,在1996年春,Microsoft改變了主意,選擇ActiveX作為新的商標名稱。ActiveX是指寬松定義的、基于COM的技術集合,而OLE仍然僅指復合文檔。當然, ActiveX最核心的技術還是COM。ActiveX和OLE的最大不同在于,OLE針對的是桌面上應用軟件和文件之間的集成,而ActiveX則以提供進一步的網絡應用與用戶交互為主。到這里,大家應該對ActiveX、OLE和COM三者的關系有了一個比較明確的認識,COM才是最根本的核心技術,所以下面的重點COM。讓對象模型完全獨立于編程語言,這是一個非常新奇的思想。這一點從C++和Java的對象概念上,我們就能有所了解。但所謂COM對象究竟是什么呢?為了便于理解,可以把COM看作是某種(軟件)打包技術,即把它看作是軟件的不同部分,按照一定的面向對象的形式,組合成可以交互的過程和以組支持庫。COM對象可以用C++、Java和VB等任意一種語言編寫,并可以用DLL或作為不同過程工作的執行文件的形式來實現。使用COM對象的瀏覽器,無需關心對象是用什么語言寫的,也無須關心它是以DLL還是以另外的過程來執行的。從瀏覽器端看,無任何區別。這樣一個通用的處理技巧非常有用。例如,由用戶協調運行的兩個應用,可以將它們的共同作業部分作為COM對象間的交互來實現(當然,現在的OLE復合文檔也能做到)。為在瀏覽器中執行從Web服務器下載的代碼,瀏覽器可把它看作是COM對象,也就是說,COM技術也是一種打包可下載代碼的標準方法(ActiveX控件就是執行這種功能的)。甚至連應用與本機OS進行交互的方法也可以用COM來指定,例如在Windows和Windows NT中用的是新API,多數是作為COM對象來定義的。可見,COM雖然起源于復合文檔,但卻可有效地適用于許多軟件問題,它畢竟是處在底層的基礎技術。用一句話來說,COM是獨立于語言的組件體系結構,可以讓組件間相互通信。隨著計算機網絡的發展,COM進一步發展為分布式組件對象模型,這就是DCOM,它類似于CORBA的ORB,本文對此將不再做進一步的闡述。通過上面的講述相信大家一定對ActiveX、OLE和COM/DCOM的關系有了一個清楚的了解。

            使用Windows的人對于ActiveX控制一定不會陌生,它提供了一種類似于DLL動態鏈接庫的調用,不過它與DLL的唯一區別就是ActiveX不注冊不能被系統識別并使用。那么,當我們得到一個ActiveX沒有被正確安裝且不能使用的消息后,又要安裝ActiveX怎么辦呢?1.Regsvr32程序法在Windows的System文件夾下有一個regsvr32.exe的程序,它就是Windows自己帶的ActiveX注冊和反注冊工具。利用它也能夠非常方便地注冊AcitveX控件,它的用法為:regsvr32/u/s/n/i dllname, dllname其中dllname為ActiveX控件文件名,建議在安裝前拷貝到System文件夾下參數有如下意義:/u - 反注冊控件/s - 不管注冊成功與否,均不顯示提示框/c - 控制臺輸出/i - 跳過控件的選項進行安裝 (與注冊不同)/n - 不注冊控件,此選項必須與/i 選項一起使用例如筆者要注冊一amovie.ocx控件,則打入 regsvr32 amovie.ocx即可,要反注冊它時只需使用 regsvr32 /u amovie.ocx就行了。2.注冊表法所謂注冊AcitveX,無非是將一些信息記錄在Windows的注冊表中,如Shockwave Flash Object控件,我們可以運行Regedit.exe注冊表編輯程序,利用關鍵字進行搜索,然后把搜索得到后的注冊表導出為一REG注冊表文件,再將其相應的ActiveX文件拷貝到Windows的System文件夾(一般ActiveX的文件名為OCX,安裝在Windows的System文件夾內)下,最后在要安裝ActiveX的機器上雙擊導入剛才導出的注冊表文件即可完成安裝。

           Activex,OLE,COM都是微軟的一些技術標準。Ole比較老后來發展成Activex,再后來發展成為COM OCX,DLL是擴展名。 Activex有兩種擴展名OCX和DLL。實際上你可以把它們的擴暫名字調換。 COM作為ActiveX的更新技術,擴展名也有可能是DLL DLL文件還有可能是動態鏈接庫。主要是裝載一些函數,可以動態加載。


    From : http://hi.baidu.com/yaolihui/blog/item/aa9cfcce91931e0192457eb5.html




    本博客為學習交流用,凡未注明引用的均為本人作品,轉載請注明出處,如有版權問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。
    posted on 2008-04-27 08:56 Jack.Wang 閱讀(11829) 評論(2)  編輯  收藏 所屬分類: 開發技術

    Feedback

    # re: Activex、OLE、COM、OCX、DLL之間有什么區別? 2008-04-27 12:58 阿里
    還有MFC中的Automation也屬于COM的一種。  回復  更多評論
      

    # re: Activex、OLE、COM、OCX、DLL之間有什么區別? 2008-04-27 19:33 銀河使者
    activex、ole、ocx都是基于com技術的。這三種實際上都是com的具體表現。

    至于dll,和其它四種沒什么關系,雖然Activex、OLE、COM、OCX的擴展名也可以是dll,但也可以是exe,或是ocx/vbx等等。

    dll的種類就很多了,com組件有很多是以dll形式提供的,當然,普通的api一般也是被封在dll中。 甚至還有.net程序。

    實際上,微軟在.net之前,只有兩種基本的組件技術,一個是com(在com的基礎上出現了很多其他的技術,如activex),另一個就是普通的api了,如windows kernel api。 不過有了.net ,盡盡量使用.net的技術。com注冊太麻煩,弄不好就會掉進com hell里去了。


      回復  更多評論
      

    主站蜘蛛池模板: 亚洲人午夜射精精品日韩| 免费一区二区视频| 亚洲视频在线一区| 三级网站在线免费观看| 国产日韩亚洲大尺度高清| 青柠影视在线观看免费| 亚洲乱码一区二区三区在线观看| 中文字幕a∨在线乱码免费看 | 亚洲明星合成图综合区在线| 久久99精品视免费看| 亚洲视频免费在线播放| 亚洲成在人线aⅴ免费毛片| 国产成人精品日本亚洲网址| 午夜成年女人毛片免费观看| 亚洲日本成本人观看| 国产极品粉嫩泬免费观看| 新最免费影视大全在线播放| 精品国产综合成人亚洲区| 99久9在线|免费| 亚洲乱码在线观看| 亚洲成片观看四虎永久| 在线免费播放一级毛片| 亚洲视频免费在线看| 成人黄18免费视频| 国产精品无码永久免费888| 亚洲av伊人久久综合密臀性色| 亚洲成人免费电影| 亚洲精品一卡2卡3卡四卡乱码| 亚洲精品国产日韩无码AV永久免费网 | 国产jizzjizz视频全部免费| 国产福利免费视频| 亚洲美女视频网址| 免费观看大片毛片| 国产免费一区二区三区不卡| xxx毛茸茸的亚洲| 亚洲国产成人爱av在线播放| 99热这里有免费国产精品| 日本亚洲欧美色视频在线播放| 亚洲精品无码Av人在线观看国产| 美女被cao免费看在线看网站| 人与动性xxxxx免费|