OLE、OCX和ActiveX控件之間的比較


 

 

  OLE(Object Linking and Embedding,對象連接與嵌入)

  一、過去的OLE和今天的OLE

  最初的OLE含義是指在程序之間鏈接和嵌入對象數據,它提供了建立混合文檔的手段(資深Windows 3.X 用戶可能記得當初在Word6.0中插入一個圖形的新奇和喜悅),使得那些沒有太多專業知識的用戶能夠很容易地協調多個應用程序完成混合文檔的建立。1991年制定的OLE1.0規范主要解決多個應用程序之間的通信和消息傳遞問題,微軟希望第三方開發商能夠遵守這個規范,以使在當時的Windows平台上的應用程序能夠相互協調工作,更大的提高工作效率。然而事與願違,只有很少的軟件開發商支持它。為此,微軟於1993年發布了新的規范——OLE2.0,它在原有的基礎上完善並增強了以下各方面的性能:      1.OLE自動化:一個程序有計划地控制另一個程序的能力。

  2.OLE控件:小型的組件程序,可嵌入到另外的程序,提供自己的專有功能。

  3.OLE文檔:完善了早期的混合文檔功能,不僅支持簡單鏈接和嵌入,還支持在位激活、拖放等功能。 強大的功能使得很多的開發商開始支持新的OLE技術,因為微軟在OLE2.0中建立了一個稱為COM(Component Object Model即組件對象模式)的新規范。

  二、COM規范

  COM規范被公認為是微軟對Windows系統的未來支持和發展策略,是微軟的關於全球興起的組件市場的策略。該規范提供關於新OLE技術的編程模型和二進制標准,但並沒有規定實現COM規范的計算機語言(實際上只要支持指針概念的計算機語言就可以用於開發基於COM的程序),也沒有指定應用程序應該如何組織,它只是一個指導性規范。如今的OLE 之所以吸引大家我想很大程度上是由於COM規范的制訂,它能夠保證所有遵循此規范的應用程序之間的通信和消息傳遞乃至功能調用的安全和順利實現。所有OLE的實現都是基於COM 的,有人說COM是OLE的基石。OLE組件通過稱為接口的一組相關函數集來支持對OLE對象的數據的訪問,而接口的每一個函數稱為方法(Method),通過接口可被訪問的對象的數據稱為屬性。如果您熟悉VB,想必這些您一聽就明白。注意這里的對象也不能和C++語言的類的實例對象相混淆。 實現了不同接口的文檔應用程序在OLE中的稱呼不一樣,有的稱為文檔容器,有的稱為文檔服務器,有的應用程序既是容器又是服務器,著名的例子是微軟的世界級Office軟件Word。容器是一個客戶程序,它具有申請並使用其它COM組件通過接口為其它程序實現的功能;服務器通過特定的接口將自己完成的一些功能,提供給使用自己的應用程序(例如畫筆程序是一個文檔服務器,它提供創建並編輯BMP 圖像的功能)。當打開Word,選擇【插入】菜單下的【對象...】項,您可以看到在您的系統中存在哪些文檔服務器,此時的Word以文檔容器的身份出現。當您雙擊插入的對象后發現Word的菜單有些改變成文檔服務器程序的菜單,可以在當前的環境下編輯對象,這稱為在位激活。 和OLE文檔技術類似,允許一個應用程序通過編程控制另一個應用程序“自願”提供的功能的技術稱為OLE自動化。自身暴露一些可編程對象給其它程序的應用程序叫自動化服務器,利用並操縱自動化服務器提供的功能的應用程序叫自動化客戶或自動化控制器,有些程序既是自動化服務器又是自動化控制器。例如在VB中我們可以通過編程創建並編輯一個Excel工作表(很多參考書都以此為例),這里的VB就是自動化控制器,而創建工作表的Excel程序則是自動化服務器,但在Excel中我們又可以利用VBA語言創建PowerPoint的幻燈片,它又成了自動化控制器。利用OLE自動化技術可以實現軟件的一次開發和多次利用,這也是集成組件的關鍵技術。無論是操作系統還是應用軟件,微軟都有意識朝着這個方向發展,例如從Windows95開始,包括WindowsNT4.0以后的操作系統的Shell就實現了OLE自動化技術。

  OCX(對象類別擴充組件)

  如果你用過Visual Basic或者Delphi一類的可視化編程工具,那么對控件這個概念一定不會陌生,就是那些工具條上的小按鈕,如EditBox,Grid,ImageBox,Timer等等。每個控件都有自己的事件、方法和屬性。使用了控件的編程非常容易。首先,在程序的設計階段可以設置一些屬性,如大小,位置,標題(caption)等等;在程序運行階段,可以更改這些屬性,還可以針對不同的事件,調用不同的方法來實現對該控件的控制。控件就好像一塊塊的積木,程序要做的事只是將這些積木搭起來。控件的最大好處是可以重復使用,甚至可以在不同的編程語言之間使用,例如你可以在VB中嵌入用VC開發的控件。   控件的本質是微軟公司的對象鏈接和嵌入(OLE)標准。由於它充分利用了面向對象的優點,使得程序效率得到了很大的提高,從而得到了廣泛的應用。國外有很多公司就是專門制作各種各樣控件的。控件的最早形式是以.VBX的格式出現的,后來變成了.OCX。由於Internet的廣泛流行,微軟公司推出了ActiveX技術,就是從OLE發展起來的,加入了WWW上的功能。所以目前最流行的是ActiveX控件。   ActiveX控件.ActiveX控件是可重用的軟件組件。使用它可以很快地在網址、台式應用程序、以及開發工具中加入特殊的功能。ActiveX控件的使用者可以無需知道這些組件是如何開發的,便可以完成網頁或應用程序的設計。   對象鏈接和嵌入用戶控件(OCX)是一種可以由在微軟的Windows系統中運行的應用軟件創建使用的特殊用途的程序。OCX提供操作滾動條移動和視窗恢復尺寸的功能。如果你有Windows系統,你會發現在你的Windows地址錄里有大量OCX文件名后綴的文件。 對象鏈接和嵌入(OLE)被設計來支持混合文檔(包含多種資料類型,比如文本、繪畫圖像、聲音、動畫)。Windows桌面就是一個混合文檔的范例,微軟使用OLE來建立的。OLE和組件對象模型(COM繼OLE后的更常用的概念)支持“即插即用”程序的發展,“即插即用”程序在系統中可以用任何語言寫入並可以由任何應用程序動態地使用。這些程序被認為是他們在其上運行的container的組建和應用程序。這種基於組件的近似應用程序的發展縮減了程序調試時間並改善了程序的性能和品質。Windows應用發展程序(比如powerbuilder和Microsoft Access)具有OCX的優勢。

  一、OCX組件的來歷是怎樣的?

  一般的開發工具都會提供一些標准控件,但不管標准控件多么強大、多么完善,都不能完全滿足用戶的需要。所以易語言就提供一個接口,允許用戶編寫自己的控件插入到易語言中使用。用戶編寫自己的控件在使用方法上同標准控件是相同。按照易語言的接口標准編寫的控件就是OCX。由於使用OCX可以節省開發軟件的時間,所以現在幾乎所有開發工具都允許用戶使用OCX來增強其功能。后來隨着Internet的流行,微軟又讓網頁中可以嵌入OCX,並稱其為ActiveX控件。目前可以編寫OCX的工具包括VB、VC、Delphi。易語言也即將支持OCX。

  二、OLE和OCX的關系是什么?

  OLE和OCX通稱對象鏈接與嵌入。易語言已通過超級鏈接框等實現很多對象的鏈接功能,對象的嵌入易語言也即將支持。 OLE與OCX的應用主要是源於將多個應用信息源組合到一起的目標,OCX即將在易語言中得到廣泛的應用,因為它能更好的與易語言的應用程序相結合,從而實現易語言不好實現或是很難實現的功能。實際上,易語言本身以及Visual Basic等等其它程序會提供多處實現特定功能的OCX控件。通過它們,我們可以非常容易的實現一些易語言本身不能實現的功能。

  三、控件與DLL的關系是什么?

  組件的前身是動態鏈接庫(DLL),DLL使我們能夠用一種語言開發一個可以用於任何其他語言的過程庫。DLL的另一個強大的功能是在運行期間被加載的,這使得我們能夠將開發任務划分為一個個組件而不必開發並靜態鏈接一個大型應用程序。

  ActiveX

  ActiveX是OCX 的高級形式(也許把它看作OLE的較簡單形式更合適)。但是,這個簡單定義不能表達ActiveX控件的實質,用戶認為ActiveX 就是 OLE 。對程序員來說,ActiveX 還是一套用於Internet的實能技術。它提供了過去沒有的一種信息交換方法。 注釋 Microsoft 目前正在開發一種新的Internet專用的組件技術,稱為COM+ 。盡管許多內部網使用了ActiveX,而且ActiveX依然將用作應用程序組件,但ActiveX從未在Internet上廣泛被采用過。ActiveX 在Internet上失敗的理由有三條:組件大小,安全考慮以及缺乏對非Microsoft瀏覽器的兼容性。請謹記,你或許應該考慮把ActiveX控件作為公司內部使用的解決方案,而不是做為Internet的實現技術。 作為真正欣賞ActiveX的程序員,就不得不從程序員的角度去看一下OLE,這就是意味着要看一下OCX。從用戶的角度看,OCX所做的都是在兩個應用程序(或操作系統與一個應用程序)之間交換數據。OCX比數據交換的內涵要豐富得多。它們包括着一種稱之為組件對象模型(COM)的概念。COM是定義對象模塊間標准二進制接口的規范。這個接口定義了函數調用方法、基於標准結構的數據傳送技術以及幾個標准的函數調用。使用COM 意味着,你寫應用程序模塊(如OCX)時使用何種語言都無關緊要,因為模塊接口在二進制層次上是相同的。

  四、什么是ActiveX插件(控件)?

  根據微軟權威的軟件開發指南MSDN(Microsoft Developer Network)的定義,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些軟件組件或對象,可以將其插入到WEB網頁或其它應用程序中。 ActiveX(COM)技術是一種嵌入式程序技術,它其實就是OLE和 OCX的融合。 ActiveX是Microsoft提出的一組使用COM(Component Object Model,部件對象模型)使得軟件部件在網絡環境中進行交互的技術。 它與具體的編程語言無關。作為針對Internet應用開發的技術 ,ActiveX被廣泛應用於WEB服務器以及客戶端的各個方面。同時,ActiveX技術也被用於方便地創建普通的桌面應用程序。在Applet中可以使用ActiveX技術 ,如直接嵌入 ActiveX控制,或者以ActiveX技術為橋梁,將其它開發商提供的多種語言的程 序對象集成到Java中。與Java的字節碼技術相比,ActiveX提供了“代碼簽名 ”(Code Signing)技術保證其安全性。   ActiveX是Microsoft的元素軟件標准。簡單地說,ActiveX技術是一種共享程序數據和功能的技術。它由微軟提出並大力推廣,並已成為事實上的標准。

  ActiveX技術是Microsoft對OLE技術的更新和發展,Microsoft公司為了適應網絡的高速發展把它的OLE技術和OCX技術融為一體並加以改進形成聯合標准,改進之后賦予新名字ActiveX。也就是說,ActiveX中涵蓋了OLE的所有技術和功能,同時又具有許多新的特性,以適應網絡發展的需要。

  ActiveX指的是一組包括控件、DLL和ActiveX文檔的組件,它通常以動態鏈接庫的形式存在,其設計思想是將一個程序(比如Flash動畫)嵌入到另一個程序中(這個程序通常被稱做容器,比如Authorware、Delphi、VB、VC、Internet Explorer等)。借助這種技術使得用戶在一個程序中所創建的信息可以被集成到其它程序所產生的文檔中。.這樣就可使它(如Flash動畫)可以隨意地應用到各種場合。

  ActiveX控件的數據輸入和函數功能執行都必須通過容器,因此ActiveX控件和容器之間必須有一些特定的接口協議。ActiveX控件必須具備如下的性能機制

  屬性和方法:ActiveX控件必須提供屬性的名稱、方法的名稱及參數,通過這項機制,容器可以存取和改變ActiveX控件的屬性參數。

  事件:ActiveX控件由這項機制通知容器在ActiveX控件中發生的事件,比如屬性參數的改變,用戶按下鼠標左鍵等。

雖然在本質上ActiveX和OLE是同一種技術(實現不同程序的數據和功能的共享),但其目的有所差別。ActiveX的目的主要是共享程序模塊之間的計算功能,生成一些專門的可以嵌入其他程序中的“小程序”,例如Microsoft web瀏覽器控件可以使得別的應用程序能夠瀏覽(僅僅是瀏覽而不是創建)Web網頁。

  ActiveX控件是一個模塊化的靈活對象,如果某個應用程序或網頁需要增加一項特殊的功能,則無須重寫整個程序,只要靈活地插入一個具有此項功能的ActiveX控件即可實現,ActiveX的優勢還在於它的動態可交互性,用戶可以動態地在使用過程中,通過改變它的屬性和參數,在應用程序中實現自己的特殊要求。

  五、什么是COM?

  為了提供使對象能夠與主應用程序通信的一種標准,微軟原來引入了對象鏈接和嵌入(OLE)。原來規范的目標是提供一種途徑,使應用程序,如Excel能夠將電子表格嵌入到其他支持OLE標准的應用程序中。那時,人們認識到,OLE支持一種技術的基礎,這種技術使得能夠共享類屬的對象,即組件對象模型(COM)。這種概念用於為OCX組件創建一種組件規范。這將我們帶到了當前的標准ActiveX和ActiveX控件,OLE和OCX的發展最終形成了COM的頂尖產物。

  可以將COM看作是在兩塊代碼之間共享組件的二進制標准。COM根據對象可以完成的功能使得對象實現抽象化。對象可以完成的功能在其接口部分描述。接口就是對象可以實現的一組在邏輯上相關功能的訪問方法。每個對象都擁有一個唯一的類ID(CLSID),它使用任意的一組接口。所有類必須具有IUNKNOWN接口,這個接口又可以被用於訪問這個類支持的任何接口。這是一種功能強大的對象模型,因為它使應用程序能夠在運行過程中確定任意一個對象是否可以完成某一項任務。

  COM對象是通過幾個方法來實現的。可以將COM對象編譯成DLL或OCX,它們可以與調用應用程序在相同的進程空間中運行。COM對象還可以象編譯過的可執行文件一樣在它自己的進程空間中運行。利用分布式COM(DCOM),對象可以運行在不同的機器上,即可以運行在世界的任何位置。盡管COM對象的實現代碼可能處於不同的進程中或不同的機器上,但COM對象系統服務去除了調用COM對象的復雜性。ActiveX組件是COM對象,這些對象實現了一套基本的接口,使組件能夠被嵌入到可以主控ActiveX組件的應用程序中去。

  六、OLE與COM的關系是什么?

  組件對象模型COM(Component Object Model)是OLE的心臟,它不但提供了一個實現OLE的框架,還為一整類新軟件提出了一種全新的設計思想。它是一種面向對象的結構,定義了一套對象間相互通信的標准方式,規定了如何使一些小的、定義良好的軟件模塊在系統中共存並充分地相互作用。依照這種結構,可以將若干元件組合起來,以建立更大的和更復雜的系統。

  七、ActiveX的來歷是怎樣的?

  ActiveX的演變最早可以回溯到早期的剪切和粘貼以及后來的OLE(Object Link and Ember——對象的鏈接與嵌入)技術。實質上,ActiveX已經不僅僅是一個技術上的問題,而是微軟的整個Internet戰略的中心環節。微軟把它的OLE和OCX技術融為一體並加以改進,將所形成的聯合標准命名為ActiveX。ActiveX把控件規范得更加精練,使得這些控件更加小巧而且效率更高,同時加強了其接口對數據和特性的管理。ActiveX可以幫助應用程序開發者、Web網頁制作者建立動態的Internet工具、網頁和站點。 實際上可以將Microsoft提供的ActiveX控件看成是一個小的應用程序庫。這些小程序對外提供接口,可以編寫腳本語言(如用Vbscript等語言編寫)並對其進行控制,這樣就能使網頁更加生動。

  八、OLE控件的宗旨是什么?

  OLE控件的思想在於:開發出即插即用的可重復利用的代碼,使第三方用戶開發的控件很容易在自己的開發環境中得到應用。它的實質就是,用現有構件(控件)構造程序,即構件式軟件。

  九、對象嵌入(OCX)通俗的叫法是什么?

  我們平常所說的窗口套窗口就是對象嵌入的一種。

  ActiveX與OCX控件   就絕大多數情況來說,ActiveX控件和 OCX 控件是完全可以互換的。可以看到與Internet風馬牛不相及的ActiveX控件廣告,仔細一看,就會發現,在不久以前,這些控件大概還出現在OCX控件列表中。當然,你要仔細觀察這些控件。即使ActiveX控件與OCX 控件確實共享了同一繼承,ActiveX控件與OCX控件也不完全是一回事。請記住,ActiveX 控件是能夠在Internet上工作的。   Internet對程序設計環境帶來了一些特殊的挑戰。你不再能夠奢求高速裝入,OCX 在因特網環境中使用時,其規模成了一個嚴重的問題,下載一個60KB的OCX 就對用戶的耐心帶來了考驗,而試圖下載一個200KB的OCX 大概會導致用戶中斷下載。而ActiveX 控件是OCX的小型版本。   注 OCX和ActiveX控件的一個主要差別是ActiveX控件通常要小一些(輕一些)。 ActiveX控件也在受到各種機器專用需求的牽制。在機器上安裝OCX時,安裝程序能對機器進行檢測並作出所需的許可。對ActiveX控件卻不能這樣要求。在這里你不能對客戶機作任何假定,客戶機可以是新的奔騰,也許是昨日的80386。(如果你的ActiveX控件確存在某種平台限制,那么,要么設法解決它,要么肯定每個使用它的人都清楚這一限制。)   你還需要應付OCX程序員從未想到的情況。比如,如果瀏覽器根本不支持ActiveX時會發生什么?目前處理這一問題的方法是,瀏覽器對那些不知作如何處理的HTML 標記只是簡單地忽略掉。在這種情況下很容易應付一個與ActiveX不兼容的瀏覽器──只需打出一條消息,讓用戶知道他們的瀏覽器不能在當前頁工作並指導用戶換一個瀏覽器就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM