日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Activex、OLE、COM、OCX、DLL之间区别、联系

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activex、OLE、COM、OCX、DLL之间区别、联系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://baike.baidu.com/view/393671.htm

概述

????? .ocx是ocx控件的擴展名,與.exe .dll同屬于PE文件。下面說說什么是ocx控件!

  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控件在WINDOWS XP中的注冊方式

????? ocx控件的安裝方式有很多種,這里介紹最簡單的一種。

  步驟:

  1.將需要安裝的OCX控件文件復制到某個目錄,例如C盤根目錄下。

  2.進入開始,點擊運行。

  3.在出現的框中鍵入regsvr32 C:/xxxx.ocx 。(XXXX為控件名, C:/為目錄)

  4.點擊確認后等待出現提醒注冊成功即可。

  oca 文件

  Oca文件不是控件,其中保存Ocx控件的屬性


///

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

??????? 熟悉面向對象編程和網絡編程的人一定對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文件還有可能是動態鏈接庫。主要是裝載一些函數,可以動態加載。

//

轉自:http://lpcjrflsa.iteye.com/blog/454934

一、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插件(控件)?

根據微軟權威的軟件開發指南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)通俗的叫法是什么?

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

//

轉自:http://blog.csdn.net/scucj/archive/2006/06/29/852181.aspx

一、關于DLL的介紹
?
??? DLL,動態鏈接庫,Dynamic Link Library的縮寫,是一個包含函數和數據的模塊集合,可以被其它應用程序共享的程序模塊。DLL作為共享函數庫的可執行文件,封裝了一個或多個已被編譯、鏈接的函數。多個進程可以同時使用一個 DLL,在內存中共享該 DLL 的一個副本。DLL 還有助于共享數據和資源。?? 它和可執行文件(.EXE文件)非常類似,他們的區別在于 DLL 中雖然包含了可執行代碼卻不能單獨執行,只能由需要使用它的應用程序來直接或間接調。[1]

??? 通俗的說,在Windows操作系統中,許多應用程序并不是一個完整的可執行文件,它們的正確執行需要調用一些相對獨立的動態鏈接庫,即DLL文件。一個應用程序可以調用多個DLL文件,一個DLL文件也可能被幾個應用程序所共用,這樣的DLL文件被稱為共享 DLL 文件。[2]DLL 文件一般被存在C:/Windows/System 目錄下,也可能放在應用程序所在的目錄或是子目錄中。

?? 提到動態鏈接,先說明一下靜態連接。什么是靜態連接呢?在程序鏈接的過程中,需要將編譯后的二進制代碼鏈接成目標代碼,鏈接器從靜態鏈接庫中獲得所有被引用的函數,并將這些被引用的函數同代碼一起放到可執行文件中。那么關于 DLL 的靜態連接則是指鏈接器將被引用的庫函數的代碼復制到調用 DLL 的可執行模塊(.dll 文件或 .exe 文件)中。

? 什么是動態鏈接呢?動態鏈接是系統允許可執行模塊(.dll 文件或 .exe 文件)在運行程中,只需要包含在定位 DLL 函數的可執行代碼所需的信息。換句話說,可執行模塊(.dll 文件或 .exe 文件)在運行時加載這些模塊(亦即所需的模塊映射到調用進程的地址空間)。[3]

?? 那么動態鏈接和靜態連接 相比,優點有哪些呢?

??? (1)節省內存,減少交換操作。使用動態鏈接,多個進程可以同時使用一個 DLL,在內存中共享該 DLL 的一個副本。使用靜態鏈接,每個應用程序都包含被引用的庫函數的代碼,那么Windows 必須在內存中為每個應用程序加載引用的庫函數的代碼的一個副本。
??? (2)節省磁盤空間。使用動態鏈接,在磁盤上僅需要 DLL 的一個副本。使用靜態鏈接,每個應用程序都包含被引用的庫函數的代碼。
??? (3)更易于升級。使用動態鏈接,DLL 中的函數發生變化時,只要函數的參數和返回值沒有更改,就不需重新編譯或重新鏈接使用它們的應用程序。使用靜態鏈接,在函數發生變化時,需要重新鏈接來生成應用程序。
??? (4)支持多語言程序,只要程序遵循函數的調用約定,用不同編程語言編寫的程序就可以調用相同的DLL 函數。
??? (5)提供擴展 MFC 庫類的機制。可以從現有 MFC 類派生類,并將它們放到 MFC 擴展 DLL 中供 MFC應用程序使用。
??? (6)支持多語言程序,并使國際版本的創建輕松完成。通過將資源放到 DLL 中,創建應用程序的國際版本變得容易得多。可將用于應用程序的每個語言版本的字符串放到單獨的 DLL 資源文件中,并使不同的語言版本加載合適的資源。[4]

? DLL 中包含下面兩類函數的定義:
? 導出函數:這些函數由可執行模塊(.dll 文件或 .exe 文件)調用。
? 內部函數:這些函數僅從定義它們的 DLL 中調用。DLL 還導出數據。不過,這些數據由相應的函數使用。

?? 可以通過下列方式調用 DLL 中的函數:?
??? 加載時動態鏈接:可執行模塊執行顯式調用以導出 DLL 函數。為 DLL 創建導入庫,然后將 DLL 鏈接到應用程序。在加載應用程序時,導入庫提供加載 DLL 和查找導出的 DLL 函數所需的信息。
??? 運行時動態鏈接:在運行時加載 DLL 時,可執行模塊使用 LoadLibrary 函數或 LoadLibraryEx 函數。可執行模塊調用 GetProcAddress 函數以獲取導出的 DLL 函數的地址。在鏈接時,Windows 搜索預安裝的一組 DLL,例如性能庫 (Kernel32.dll) 和安全庫 (User32.dll)。然后,Windows 按以下順序搜索DLL:
1.當前進程的可執行程序所在的目錄。
2.當前目錄。
3.Windows 系統目錄。(GetSystemDirectory 函數獲取 Windows 系統目錄的路徑。)
4.Windows 目錄。(GetWindowsDirectory 函數獲取 Windows 目錄的路徑。)
5.PATH 環境變量中列出的目錄。注意:LIBPATH 環境變量不用于搜索。[3]

??? DLL 有一個特殊的入口點(DllMain 函數),它在附加和分離進程和線程時運行。此行為允許根據需要創建和銷毀數據結構。文件擴展名為 .ocx、.cpl 和 .drv 的文件類型也是 DLL,盡管文件擴展名已改變。
??? 您可以通過創建 DLL 實現以下目的:
??? (1)將程序劃分為可按需加載的單獨模塊。
??? (2)存儲特定于語言或特定于區域的資源。
??? (3)使您自己的應用程序能夠使用核心代碼庫。
??? (4)生成進程內 COM 對象或 ActiveX 控件 (OCX)。
??? (5)將 OLE 對象用作進程內 DLL。這一用法可改進 OLE 鏈接的性能。
??? (6)使用控制面板擴展或使用某些類型的驅動程序。 [3]

二、關于以.ocx為后綴名的ActiveX控件

??? 剛才提到過,文件擴展名為 .ocx、.cpl 和 .drv 的文件類型也是 DLL。

??? 現在的ActiveX 控件等價與以前的OLE控件或OCX,一個典型的控件包括設計時和運行時的用戶界面,唯一的IDispatch接口定義了控件的屬性和方法,唯一的 IConnectionPoint接口定義控件可引發的事件。一個控件可以在容器中運行,所以從運行的角度看它類似與一個DLL。[5]

??? 盡管 ActiveX 和 OLE 都基于組建對象模型(Component Object Model,COM),它們為程序員提供的卻是截然不同的服務。COM提供的是低級的對象捆綁機制,該機制支持對象之間的交互通訊。OLE使用COM來提供低級的應用服務,例如采用連接和嵌入機制,支持用戶創建復合文檔。與之不同,ActiveX提供更精細的結構,用以支持在網絡站點上嵌入控件,以及對事件的交互反應。優化ActiveX,目的是為了提高時間和空間效率,而優化OLE,是為了便于終端用戶的使用和集成臺式系統的應用程序。ActiveX還為Internet技術帶來了一些技術上的變革,例如,ActiveX大大減小了代碼量(代碼量減少了百分之五十到七十),支持更多的提交和異步連接。 [6]

?? ActiveX的基礎是OLE和COM,但是通過MS的各種開發工具可以屏蔽掉COM模型中許多另人費解的技術細節。ActiveX組件技術包括以下一些方面:(1)自動化服務器 (2)自動化控制器 (3)控件 (4)COM對象 (5)文檔 (6)容器 。

?? 以.ocx為后綴名的ActiveX控件主要應用在WEB上和Window Forms程序開發上。應用程序使用ActiveX/COM組件來擴展自身的業務邏輯、事務處理和應用服務的范圍。

?? 順便提一下以.ocx為后綴名的ActiveX控件的注冊和卸載方法,在“開始”菜單的“運行”輸入以下代碼完成任務:
??? regsvr32 path & "/xxx.ocx" '注冊
??? regsvr32 /u path & "/xxx.ocx" '卸載

??? 其中path代表該xxx.ocx所以在的目錄的路徑。

三、OCX和DLL的區別

?? 以.ocx為后綴名的ActiveX控件是一種比較特殊的DLL,它的基礎是OLE和COM,是有交互界面的可視化控件,定義了控件的屬性和方法,定義控件可引發的事件的響應。我們通常說的.DLL為后綴名的文件是一個包含函數和數據的模塊集合,可以被其它應用程序共享的程序模塊。


本文引用:
[1]http://zhouyi2.jblog.cn/120494.shtml
[2]http://www.symood.com/Article/ShowArticle.asp?ArticleID=197
[3]http://www.jr163.org/cup2/54/54294.htm
[4]MSDN:DLL
[5]http://www.blog.edu.cn/user2/eliming/archives/2006/1127399.shtml
[6]http://www.symood.com/Article/ShowArticle.asp?ArticleID=198

?

//

轉自:http://blog.csdn.net/effective100/archive/2008/12/21/3567922.aspx

com英文為Component Object Model(組件對象模型),是微軟生產軟件組件的標準。它是構造二進制兼容軟件組件的規范,不管組件應用何種語言編寫只要遵循com規范就可以相互直接通信。提出com規范主要是為了滿足:
1.程序的快速開發,可以將一個大型的工程分成若干個com組件同時開發。
2.可以動態的插入或卸載com組件。
3.可以隱藏或封裝com組件內部的實現細節。 com組件可以由不同的語言進行編寫,但com組件之間的通信是通過組件的接口來實現的,com組件接口的實現是統一的,它采用的是虛擬函數表(VTBL)形式。虛擬函數表中包含了組件函數的一組指針,我們可以通過這組指針來獲取我們想要通信的組件函數的內存地址。
dll(動態鏈接庫)是包含函數和數據的模塊的集合。它可以導出數據也可以導出函數以供其它的dll調用。dll的加載可以通過靜態鏈接和動態鏈接兩種方式。
1.靜態鏈接時將所要鏈接的dll模塊以二進制的形式編譯進其他模塊。
2.動態鏈接指調用模塊在運行時加載DLL,使用LoadLibrary函數或LoadLibraryEx函數將dll 加載到進程的地址空間,并調用GetProcAddress函數以獲取導出的 DLL 函數的地址。
動態加載dll的優點:
1.DLL可節省內存并減少交換。通過在內存中共享 DLL 的單個副本,多個進程可以同時使用一個DLL。相比之下,對于使用靜態鏈接庫構建的每一個應用程序,Windows 都要在內存中為其加載庫代碼的一個副本。
2.DLL 可節省磁盤空間。 多個應用程序可以共享磁盤上的一個 DLL 副本。相比之下,使用靜態 鏈接庫構建的每一個應用程序都需要讓鏈接到程序文件映像的庫代碼作為一個單獨的專用副本。
dll與com的關系:com是一種規范,按照是com規范實現的dll可以被視為com組件,例如我們用mfc建立的Active X控件工程其中的接口封裝是靠idl描述的所以可以視為com組件。而且從上面關于com和dll的說明可以看出com組件的接口是一組具有特定規范的函數,所以com組件可以別視為dll但dll不一定是com組件。
com和DLL最大的區別就是: dll是以函數集合的方式來調用的是編程語言相關的象VC必須加上extern "C"...而COM是以interface的方式提供給用戶使用的是一種二進制的調用規范,是與編程語言無關的,它使用idl接口定義語言來描述自己使用類繼承來實現自己的功能和方法.DLL只有DLL一種形勢,里面可任意定義函數無限制,只能運行在本機上 而COM 有DLL和EXE兩種存在形勢: COM所在的DLL中必須導出四個函數:
dllgetobjectclass, dllregisterserver, dllunregisterserver, dllunloadnow
這四個函數各有作用,有些是提供給COM管理器用的,通過CLSID和IID來使用,有些是提供給注冊機用的.
COM結合MTS,就是COM+, 是DCOM的高級版本,提供了更為強大和安全的分布式COM服務, DCOM運行在不同的機器上 用proxy和stub來實現遠程接口的本地映射 二者從執行速度來說 二者相差無幾 但是啟動速度DLL要比COM快%

總結

以上是生活随笔為你收集整理的Activex、OLE、COM、OCX、DLL之间区别、联系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:Activex、OLE、COM、OCX、DLL之间区别、联系