電腦中擴(kuò)展名dll和ocx文件的區(qū)別

ctiveX,OLE是基于COM的一種應(yīng)用,其文件后綴一般以dll和ocx結(jié)尾;ocx作為一種特殊的dll文件,具有一定的用戶界面和事件響應(yīng),而dll文件只是方法和屬性的集合。
一、關(guān)于DLL的介紹
DLL,動(dòng)態(tài)鏈接庫(kù),Dynamic Link Library的縮寫,是一個(gè)包含函數(shù)和數(shù)據(jù)的模塊集合,可以被其它應(yīng)用程序共享的程序模塊。DLL作為共享函數(shù)庫(kù)的可執(zhí)行文件,封裝了一個(gè)或多個(gè)已被編譯、鏈接的函數(shù)。多個(gè)進(jìn)程可以同時(shí)使用一個(gè) DLL,在內(nèi)存中共享該 DLL 的一個(gè)副本。DLL 還有助于共享數(shù)據(jù)和資源。 它和可執(zhí)行文件(.EXE文件)非常類似,他們的區(qū)別在于 DLL 中雖然包含了可執(zhí)行代碼卻不能單獨(dú)執(zhí)行,只能由需要使用它的應(yīng)用程序來直接或間接調(diào)。[1]
通俗的說,在Windows操作系統(tǒng)中,許多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們的正確執(zhí)行需要調(diào)用一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈接庫(kù),即DLL文件。一個(gè)應(yīng)用程序可以調(diào)用多個(gè)DLL文件,一個(gè)DLL文件也可能被幾個(gè)應(yīng)用程序所共用,這樣的DLL文件被稱為共享 DLL 文件。[2]DLL 文件一般被存在C:\Windows\System 目錄下,也可能放在應(yīng)用程序所在的目錄或是子目錄中。
提到動(dòng)態(tài)鏈接,先說明一下靜態(tài)連接。什么是靜態(tài)連接呢?在程序鏈接的過程中,需要將編譯后的二進(jìn)制代碼鏈接成目標(biāo)代碼,鏈接器從靜態(tài)鏈接庫(kù)中獲得所有被引用的函數(shù),并將這些被引用的函數(shù)同代碼一起放到可執(zhí)行文件中。那么關(guān)于 DLL 的靜態(tài)連接則是指鏈接器將被引用的庫(kù)函數(shù)的代碼復(fù)制到調(diào)用 DLL 的可執(zhí)行模塊(.dll 文件或 .exe 文件)中。
什么是動(dòng)態(tài)鏈接呢?動(dòng)態(tài)鏈接是系統(tǒng)允許可執(zhí)行模塊(.dll 文件或 .exe 文件)在運(yùn)行程中,只需要包含在定位 DLL 函數(shù)的可執(zhí)行代碼所需的信息。換句話說,可執(zhí)行模塊(.dll 文件或 .exe 文件)在運(yùn)行時(shí)加載這些模塊(亦即所需的模塊映射到調(diào)用進(jìn)程的地址空間)。[3]
那么動(dòng)態(tài)鏈接和靜態(tài)連接 相比,優(yōu)點(diǎn)有哪些呢?
(1)節(jié)省內(nèi)存,減少交換操作。使用動(dòng)態(tài)鏈接,多個(gè)進(jìn)程可以同時(shí)使用一個(gè) DLL,在內(nèi)存中共享該 DLL 的一個(gè)副本。使用靜態(tài)鏈接,每個(gè)應(yīng)用程序都包含被引用的庫(kù)函數(shù)的代碼,那么Windows 必須在內(nèi)存中為每個(gè)應(yīng)用程序加載引用的庫(kù)函數(shù)的代碼的一個(gè)副本。
(2)節(jié)省磁盤空間。使用動(dòng)態(tài)鏈接,在磁盤上僅需要 DLL 的一個(gè)副本。使用靜態(tài)鏈接,每個(gè)應(yīng)用程序都包含被引用的庫(kù)函數(shù)的代碼。
(3)更易于升級(jí)。使用動(dòng)態(tài)鏈接,DLL 中的函數(shù)發(fā)生變化時(shí),只要函數(shù)的參數(shù)和返回值沒有更改,就不需重新編譯或重新鏈接使用它們的應(yīng)用程序。使用靜態(tài)鏈接,在函數(shù)發(fā)生變化時(shí),需要重新鏈接來生成應(yīng)用程序。
(4)支持多語(yǔ)言程序,只要程序遵循函數(shù)的調(diào)用約定,用不同編程語(yǔ)言編寫的程序就可以調(diào)用相同的DLL 函數(shù)。
(5)提供擴(kuò)展 MFC 庫(kù)類的機(jī)制??梢詮默F(xiàn)有 MFC 類派生類,并將它們放到 MFC 擴(kuò)展 DLL 中供 MFC應(yīng)用程序使用。
(6)支持多語(yǔ)言程序,并使國(guó)際版本的創(chuàng)建輕松完成。通過將資源放到 DLL 中,創(chuàng)建應(yīng)用程序的國(guó)際版本變得容易得多。可將用于應(yīng)用程序的每個(gè)語(yǔ)言版本的字符串放到單獨(dú)的 DLL 資源文件中,并使不同的語(yǔ)言版本加載合適的資源。[4]
DLL 中包含下面兩類函數(shù)的定義:
導(dǎo)出函數(shù):這些函數(shù)由可執(zhí)行模塊(.dll 文件或 .exe 文件)調(diào)用。
內(nèi)部函數(shù):這些函數(shù)僅從定義它們的 DLL 中調(diào)用。DLL 還導(dǎo)出數(shù)據(jù)。不過,這些數(shù)據(jù)由相應(yīng)的函數(shù)使用。
可以通過下列方式調(diào)用 DLL 中的函數(shù):
加載時(shí)動(dòng)態(tài)鏈接:可執(zhí)行模塊執(zhí)行顯式調(diào)用以導(dǎo)出 DLL 函數(shù)。為 DLL 創(chuàng)建導(dǎo)入庫(kù),然后將 DLL 鏈接到應(yīng)用程序。在加載應(yīng)用程序時(shí),導(dǎo)入庫(kù)提供加載 DLL 和查找導(dǎo)出的 DLL 函數(shù)所需的信息。
運(yùn)行時(shí)動(dòng)態(tài)鏈接:在運(yùn)行時(shí)加載 DLL 時(shí),可執(zhí)行模塊使用 LoadLibrary 函數(shù)或 LoadLibraryEx 函數(shù)。可執(zhí)行模塊調(diào)用 GetProcAddress 函數(shù)以獲取導(dǎo)出的 DLL 函數(shù)的地址。在鏈接時(shí),Windows 搜索預(yù)安裝的一組 DLL,例如性能庫(kù) (Kernel32.dll) 和安全庫(kù) (User32.dll)。然后,Windows 按以下順序搜索DLL:
1.當(dāng)前進(jìn)程的可執(zhí)行程序所在的目錄。
2.當(dāng)前目錄。
3.Windows 系統(tǒng)目錄。(GetSystemDirectory 函數(shù)獲取 Windows 系統(tǒng)目錄的路徑。)
4.Windows 目錄。(GetWindowsDirectory 函數(shù)獲取 Windows 目錄的路徑。)
5.PATH 環(huán)境變量中列出的目錄。注意:LIBPATH 環(huán)境變量不用于搜索。[3]
DLL 有一個(gè)特殊的入口點(diǎn)(DllMain 函數(shù)),它在附加和分離進(jìn)程和線程時(shí)運(yùn)行。此行為允許根據(jù)需要?jiǎng)?chuàng)建和銷毀數(shù)據(jù)結(jié)構(gòu)。文件擴(kuò)展名為 .ocx、.cpl 和 .drv 的文件類型也是 DLL,盡管文件擴(kuò)展名已改變。
您可以通過創(chuàng)建 DLL 實(shí)現(xiàn)以下目的:
(1)將程序劃分為可按需加載的單獨(dú)模塊。
(2)存儲(chǔ)特定于語(yǔ)言或特定于區(qū)域的資源。
(3)使您自己的應(yīng)用程序能夠使用核心代碼庫(kù)。
(4)生成進(jìn)程內(nèi) COM 對(duì)象或 ActiveX 控件 (OCX)。
(5)將 OLE 對(duì)象用作進(jìn)程內(nèi) DLL。這一用法可改進(jìn) OLE 鏈接的性能。
(6)使用控制面板擴(kuò)展或使用某些類型的驅(qū)動(dòng)程序。 [3]
二、關(guān)于以.ocx為后綴名的ActiveX控件
剛才提到過,文件擴(kuò)展名為 .ocx、.cpl 和 .drv 的文件類型也是 DLL。
現(xiàn)在的ActiveX 控件等價(jià)與以前的OLE控件或OCX,一個(gè)典型的控件包括設(shè)計(jì)時(shí)和運(yùn)行時(shí)的用戶界面,唯一的IDispatch接口定義了控件的屬性和方法,唯一的 IConnectionPoint接口定義控件可引發(fā)的事件。一個(gè)控件可以在容器中運(yùn)行,所以從運(yùn)行的角度看它類似與一個(gè)DLL。[5]
盡管 ActiveX 和 OLE 都基于組建對(duì)象模型(Component Object Model,COM),它們?yōu)槌绦騿T提供的卻是截然不同的服務(wù)。COM提供的是低級(jí)的對(duì)象捆綁機(jī)制,該機(jī)制支持對(duì)象之間的交互通訊。OLE使用COM來提供低級(jí)的應(yīng)用服務(wù),例如采用連接和嵌入機(jī)制,支持用戶創(chuàng)建復(fù)合文檔。與之不同,ActiveX提供更精細(xì)的結(jié)構(gòu),用以支持在網(wǎng)絡(luò)站點(diǎn)上嵌入控件,以及對(duì)事件的交互反應(yīng)。優(yōu)化ActiveX,目的是為了提高時(shí)間和空間效率,而優(yōu)化OLE,是為了便于終端用戶的使用和集成臺(tái)式系統(tǒng)的應(yīng)用程序。ActiveX還為Internet技術(shù)帶來了一些技術(shù)上的變革,例如,ActiveX大大減小了代碼量(代碼量減少了百分之五十到七十),支持更多的提交和異步連接。 [6]
ActiveX的基礎(chǔ)是OLE和COM,但是通過MS的各種開發(fā)工具可以屏蔽掉COM模型中許多另人費(fèi)解的技術(shù)細(xì)節(jié)。ActiveX組件技術(shù)包括以下一些方面:(1)自動(dòng)化服務(wù)器 (2)自動(dòng)化控制器 (3)控件 (4)COM對(duì)象 (5)文檔 (6)容器 。
以.ocx為后綴名的ActiveX控件主要應(yīng)用在WEB上和Window Forms程序開發(fā)上。應(yīng)用程序使用ActiveX/COM組件來擴(kuò)展自身的業(yè)務(wù)邏輯、事務(wù)處理和應(yīng)用服務(wù)的范圍。
順便提一下以.ocx為后綴名的ActiveX控件的注冊(cè)和卸載方法,在“開始”菜單的“運(yùn)行”輸入以下代碼完成任務(wù):
regsvr32 path & "\xxx.ocx" '注冊(cè)
regsvr32 /u path & "\xxx.ocx" '卸載
其中path代表該xxx.ocx所以在的目錄的路徑。
三、OCX和DLL的區(qū)別
以.ocx為后綴名的ActiveX控件是一種比較特殊的DLL,它的基礎(chǔ)是OLE和COM,是有交互界面的可視化控件,定義了控件的屬性和方法,定義控件可引發(fā)的事件的響應(yīng)。我們通常說的.DLL為后綴名的文件是一個(gè)包含函數(shù)和數(shù)據(jù)的模塊集合,可以被其它應(yīng)用程序共享的程序模塊。
OCX需要一個(gè)載體,但DLL不需要。
OCX是一個(gè)對(duì)象類擴(kuò)展;它是一種可執(zhí)行文件,但不能直接執(zhí)行;;是OCX控件的擴(kuò)展。
DLL是動(dòng)態(tài)鏈接庫(kù)的縮寫,意思是動(dòng)態(tài)鏈接庫(kù)。在Windows中,很多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們被分割成一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈接庫(kù),也就是DLL文件,并放置在系統(tǒng)中。
OCX
對(duì)象類別擴(kuò)充組件
OCX 是對(duì)象類別擴(kuò)充組件(Object Linking and Embedding (OLE) Control Extension);是可執(zhí)行的文件的一種,但不可直接被執(zhí)行; 是 ocx 控件的擴(kuò)展名,與 .exe、.dll 同屬于PE文件。
如果你用過 Visual Basic 或者 Delphi 一類的可視化編程工具,那么對(duì)控件這個(gè)概念一定不會(huì)陌生,就是那些工具條上的小按鈕,如 EditBox,Grid,ImageBox,Timer 等等。每個(gè)控件都有自己的事件、方法和屬性。
使用了控件的編程非常容易。在程序的設(shè)計(jì)階段可以設(shè)置一些屬性,如大小,位置,標(biāo)題(caption)等等,在程序運(yùn)行階段,可以更改這些屬性,還可以針對(duì)不同的事件,調(diào)用不同的方法來實(shí)現(xiàn)對(duì)該控件的控制。控件就好像一塊塊的積木,程序要做的事只是將這些積木搭起來??丶淖畲蠛锰幨强梢灾貜?fù)使用,甚至可以在不同的編程語(yǔ)言之間使用,例如,你可以在 VB 中嵌入用 VC 開發(fā)的控件。
注冊(cè)方式
ocx控件的安裝方式有很多種,這里介紹最簡(jiǎn)單的一種。
步驟:
1.進(jìn)入開始,點(diǎn)擊運(yùn)行。
2.在出現(xiàn)的框中鍵入regsvr32 C:\xxxx.ocx 。(XXXX為控件名, C:\為目錄))(regsvr32E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)
3.點(diǎn)擊確認(rèn)后等待出現(xiàn)提醒注冊(cè)成功即可。
oca 文件
Oca文件不是控件,其中保存Ocx控件的屬性
ocx的注銷
1.進(jìn)入開始,點(diǎn)擊運(yùn)行。
2.在出現(xiàn)的框中鍵入regsvr32 /u C:\xxxx.ocx 。(XXXX為控件名, C:\為目錄)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)
3.點(diǎn)擊確認(rèn)后等待出現(xiàn)提醒注銷成功即可。

RegDllView(組件服務(wù)管理工具) v1.60 漢化綠色版 64位
- 類型:系統(tǒng)其它
- 大?。?/span>69.7KB
- 語(yǔ)言:簡(jiǎn)體中文
- 時(shí)間:2015-12-15
到此這篇關(guān)于電腦中擴(kuò)展名dll和ocx文件的區(qū)別的文章就介紹到這了,更多相關(guān)ocx控件與dll區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
電腦提示找不到libcef.dll無法繼續(xù)執(zhí)行代碼怎么辦? libcef.dll丟失修復(fù)
在使用電腦的過程中,你可能會(huì)突然遇到諸如“找不到libcef.dll”或者“由于缺少libcef.dll,程序無法啟動(dòng)”之類的惱人提示,下面我們就來看看詳細(xì)解決辦法2025-04-23電腦提示由于找不到d3dx9_43.dll如何解決? d3dx9_43.dll文件丟失修復(fù)技
在使用Windows操作系統(tǒng)運(yùn)行某些應(yīng)用程序(尤其是游戲或圖形密集型軟件)時(shí),用戶可能會(huì)遇到“d3dx9_43.dll文件丟失”的錯(cuò)誤提示,這一錯(cuò)誤不僅影響程序的正常啟動(dòng),還可能2025-04-23電腦死機(jī)無反應(yīng)怎么強(qiáng)制重啟? 一文讀懂方法及注意事項(xiàng)
在日常使用電腦的過程中,我們難免會(huì)遇到電腦無法正常啟動(dòng)的情況,本文將詳細(xì)介紹幾種常見的電腦強(qiáng)制開機(jī)方法,并探討在強(qiáng)制開機(jī)后應(yīng)注意的事項(xiàng),以及如何從根本上解決電腦2025-04-16電腦如何通過數(shù)據(jù)線連接手機(jī)網(wǎng)絡(luò)? 電腦上網(wǎng)不再受限的技巧
今天我來分享一下如何用USB線把臺(tái)式電腦連接到手機(jī)的網(wǎng)絡(luò)上,其實(shí)操作非常簡(jiǎn)單,只需要幾步就搞定了,讓我們一起來看看吧2025-04-15分辨率三兄弟LPI、DPI 和 PPI有什么區(qū)別? 搞清分辨率的那些事兒
分辨率這個(gè)東西,真的是讓人又愛又恨,為了搞清楚它,我可是翻閱了不少資料,最后發(fā)現(xiàn)“小7的背包”的解釋最讓我茅塞頓開,于是,我決定整理一下,給大家分享一下我的理解2025-04-03空格符號(hào)怎么打? 全角空格和半角空格的區(qū)別介紹
你是否曾想過,為什么鍵盤上的空格鍵有時(shí)并不能滿足我們的需求?其實(shí),空格鍵輸入的空格分為全角和半角兩種2025-03-31mss32.dll文件丟失怎么辦? 電腦提示mss32.dll丟失的多種修復(fù)方法
最近,很多電腦用戶可能遇到了mss32.dll文件丟失的問題,導(dǎo)致一些應(yīng)用程序無法正常啟動(dòng),那么,如何修復(fù)這個(gè)問題呢?別擔(dān)心,本文將詳細(xì)介紹mss32.dll文件的作用和丟失原因2025-03-26電腦提示找不到openal32.dll文件怎么辦? openal32.dll丟失完美修復(fù)方法
openal32.dll是一種重要的系統(tǒng)文件,當(dāng)它丟失時(shí),會(huì)給我們的電腦帶來很大的困擾,很多人都曾經(jīng)遇到過這個(gè)問題,但你知道該如何解決嗎?詳細(xì)請(qǐng)看下文介紹2025-03-26電腦win32spl.dll文件丟失咋辦? win32spl.dll丟失無法連接打印機(jī)修復(fù)技
電腦突然提示win32spl.dll文件丟失,打印機(jī)死活連不上,今天就來給大家詳細(xì)講解一下這個(gè)問題的解決方法,手把手教你如何搞定win32spl.dll丟失的問題,讓你輕松恢復(fù)打印機(jī)連2025-03-26電腦提示binkw32.dll缺失怎么辦? 教你輕松解決binkw32.dll丟失問題修復(fù)
電腦上玩游戲時(shí),突然彈出“計(jì)算機(jī)丟失binkw32.dll”的錯(cuò)誤提示,是不是讓你瞬間抓狂?別擔(dān)心,今天就來手把手教你如何解決這個(gè)問題2025-03-26