欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

dll文件是什么? Windows系統(tǒng)中的DLL文件詳解

  發(fā)布時間:2024-05-27 11:59:53   作者:佚名   我要評論
DLL文件,是Windows操作系統(tǒng)的關(guān)鍵組件,這篇文章將解釋DLL文件的作用,并為你提供多種解決DLL文件遺失問題的策略

隨便打開一個系統(tǒng)目錄,一眼望去就能看到很多擴展名DLL的文件,這些就是經(jīng)常說的“動態(tài)鏈接庫”,DLL是Dynamic Link Library(即“動態(tài)鏈接庫”)的縮寫。從Microsoft公司推出首個版本的Windows以來,動態(tài)鏈接庫就一直是這個操作系統(tǒng)的基礎(chǔ)。.dll文件是Dynamic Link Library(動態(tài)鏈接庫)文件的縮寫,它是一種共享庫文件,包含了程序所需的代碼和數(shù)據(jù)。與靜態(tài)鏈接庫不同,動態(tài)鏈接庫可以在程序運行時動態(tài)加載,使得程序的內(nèi)存占用更小,同時也方便了程序的更新和維護。

1、看看DLL里有什么

與其用專業(yè)術(shù)語來解決DLL是什么,不如先來看看DLL里有什么。DLL和EXE文件一樣,其中包含的也是程序的二進制執(zhí)行代碼和程序所需的資源(比如圖標、對話框、字符串等),可是為什么要把代碼放在DLL里面,而不是做成EXE呢?其實DLL中的代碼是以API函數(shù)形式出現(xiàn)的,通俗地說,DLL中包含的程序代碼都被做成了一個個小模塊,應(yīng)用程序通過按下所需DLL中特定的按鈕,來調(diào)用DLL中這個按鈕所代表的功能。在使用“記事本”等程序時,如果要保存文件或打開文件,就會彈出通用文件對話框,選擇文件位置。你可知道,這就是調(diào)用了系統(tǒng)底層DLL中的通用對話框界面。

2、系統(tǒng)中幾個重要的DLL

Windows中有3個非常重要的底層DLL:Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32.dll顧名思義就是內(nèi)核相關(guān)的功能,主要包含用于管理內(nèi)存、進程和線程的函數(shù);而User32.dll中包含的則是用于執(zhí)行用戶界面任務(wù)的函數(shù),比如把用戶的鼠標點擊操作傳遞給窗口,以便窗口根據(jù)用戶的點擊來執(zhí)行預(yù)定的事件;GDI32.dll的名稱用了縮寫,全稱是Graphical Device Interface(圖形設(shè)備接口),包含用于畫圖和顯示文本的函數(shù),比如要顯示一個程序窗口,就調(diào)用了其中的函數(shù)來畫這個窗口。

3、為什么要用DLL

剛才在談到這個問題的時候,只解釋了DLL將程序代碼封裝成函數(shù)的原理。為什么封裝成函數(shù),就能成為系統(tǒng)中大量使用DLL的理由呢?

①擴展應(yīng)用程序

由于DLL能被應(yīng)用程序動態(tài)載入內(nèi)存。所以,應(yīng)用程序可以在需要時才將DLL載入到內(nèi)存中,這讓程序的可維護性變得很高。比如QQ的視頻功能需要升級,那么負責(zé)編寫QQ的程序員不必將QQ所有代碼都重寫,只需將視頻功能相關(guān)的DLL文件重寫即可。

②便于程序員合作

這個和最終用戶關(guān)系不大,僅供了解。大家都知道編程工具有很多,比如VB、VC、Delphi等,如果好幾個人合作來編寫一個大的程序,那么可能有的人用VB,有的人用VC,每人負責(zé)的部分所使用的編程語言都不同,究竟放在哪個編譯器中進行編譯呢?這就好比一群來自各個國家的人在共同編寫一篇文章,如果他們所使用的語言都不同,寫出來的文章怎么可能湊到一起呢?而有了DLL后,可以讓VC程序員寫一個DLL,然后VB程序員在程序中調(diào)用,無需為怎么將它們都編譯為一個單獨的EXE而發(fā)愁了。

③節(jié)省內(nèi)存

如果多個應(yīng)用程序調(diào)用的是同一個動態(tài)鏈接庫,那么這個DLL文件不會被重復(fù)多次裝入內(nèi)存中,而是由這些應(yīng)用程序共享同一個已載入內(nèi)存的DLL。就好比一個辦公室中,很少會為每一個員工配置一臺飲水機的,而是在一個公共位置放上一個飲水機,所有需要喝水的職員都可以共用這臺飲水機,降低了成本又節(jié)約了空間。

④共享程序資源

包括剛才提到過的通用文件對話框在內(nèi),DLL文件提供了應(yīng)用程序間共享資源的可能。資源可以是程序?qū)υ捒颉⒆址?、圖標,或者聲音文件等。

⑤解決應(yīng)用程序本地化問題

在下載了某個程序的漢化包后,打開漢化說明,經(jīng)常可以看到用下載包中的DLL文件覆蓋掉程序原來的DLL,漢化就完成了。這些程序都是將執(zhí)行代碼和應(yīng)用程序界面分開編寫了,所以漢化者只需簡單地將其中和程序界面相關(guān)的DLL漢化并發(fā)布即可。

求知若渴:探究DLL的真相

誰知道DLL里究竟有多少函數(shù),又有誰知道EXE調(diào)用了哪個DLL的哪些函數(shù)?其實,這個問題并不難解決。分析EXE文件的工具Dependency Walker(以下簡稱Depends,點擊下載Dependency Walker),今天它就是大家探險的工具,把DLL真相探個通通透透。

1.看看DLL里有多少函數(shù)

第一步:下載并解壓Depends,運行其中的depends.exe,然后選擇菜單“File→Open”(文件→打開),在文件選擇框中選中需要分析的DLL文件并打開,此處選擇QQ目錄下的QQZip.dll。

第二步:在程序左側(cè)的樹狀欄中就列出了這個DLL使用了哪些其他DLL的功能函數(shù)(原來DLL中還可以調(diào)用其他DLL^O^),而右側(cè)的兩個分欄列表分別顯示了函數(shù)輸入及輸出表,函數(shù)輸出表即為該DLL提供給其他EXE或者DLL調(diào)用的函數(shù)的總列表。

第三步:函數(shù)輸出表的Function欄中即為輸出函數(shù)的名稱,在QQZip.dll中共發(fā)現(xiàn)了2個函數(shù):Unzip、Zip。因此可以判斷該DLL在QQ程序中負責(zé)壓縮和解壓縮的任務(wù)。

2.審審EXE究竟用了哪個DLL

還是拿QQ來作為例子,在Depends中打開QQ.exe,這時界面左側(cè)的樹狀列表中顯示的就是QQ.exe調(diào)用的DLL列表,如果展開這些DLL分支,還會發(fā)現(xiàn)其他的DLL,這就說明QQ調(diào)用的這些DLL文件還有可能(幾乎是肯定)再調(diào)用別的DLL。這就好比買了一臺新的DVD機,可能其中用的機芯是SONY的,而這個機芯里的一個小電容又有可能是別的公司的,這是同樣的道理。

用DLL看穿EXE真面目

剛才得到了QQ.exe所使用的DLL列表,其實通過這個列表,還能分析出很多別的信息。比如其中包含MFC42.dll,所以可以判斷QQ.exe是采用VC(即Visual C++)編寫的,而包含WSOCK32.dll則說明這個程序帶有網(wǎng)絡(luò)通訊功能。以下是一個簡表,大家在分析別的EXE時可以根據(jù)其所使用的DLL來對其功能進行初步判斷。

DLL文件名 可以判斷出的EXE信息

  • MFC42.dll 使用VC5.0/6.0編寫。
  • VBRun*.dll “*”代表數(shù)字版本號,使用VB3.0/4.0編寫。
  • MSVBVM50.dll 使用VB5.0編寫,在Windows 98(SE)上自帶該DLL。
  • MSVBVM60.dll 使用VB6.0編寫,在Windows Me/2000/XP等系統(tǒng)上自帶該DLL。
  • ADVAPI32.dll 可能會進行注冊表操作。
  • WSOCK32.dll 具備網(wǎng)絡(luò)通訊功能。
  • WS2_32.dll 具備網(wǎng)絡(luò)通訊功能。
  • WININET.dll 具備HTTP瀏覽、下載等功能,典型的例子是瀏覽器、下載工具。
  • WINMM.dll 具備多媒體播放能力。
  • DDRAW.dll 游戲、高級圖像處理工具。
  • D3D*.dll 3D游戲,或者動畫處理工具。

4、DLL是個大寶庫

除供應(yīng)用程序調(diào)用函數(shù)的DLL外,還有另一種用來保存資源的DLL,比如QQ目錄下的QQRes.dll,用Depends打開后發(fā)現(xiàn)沒有任何輸出函數(shù),難道是一個雞肋DLL?可是改用資源工具Resource Hacker(下載地址:http://www.onlinedown.net/soft/12420.htm)打開這個DLL后,就發(fā)現(xiàn)原來其中保存了這么多QQ的資源,包括圖標、音樂、圖片、字符串、對話框……

刨根問底:DLL的故事

DLL引起的故障是很常見的,為什么會引起故障?遇到故障怎么解決?噓~偷聽一下DLL的對話,你就會明白了。

1.從搬運工談接口兼容性

在Windows工地上,有一個名叫EXE的包工頭,他手下有很多稱為DLL的建筑工人。其中有一個專門負責(zé)搬運的DLL(暫且稱為“搬運工A”),每次需要搬運水泥時,包工頭EXE都只要對他喊一聲:“來!搬。”

過了一段時間,搬運工A覺得自己的效率太低,于是從原來的每次搬1袋水泥改成了每次搬3袋水泥。改進了搬運方法后,EXE包工頭仍然每次只是喊一聲:“來!搬。”卻不知搬運工A已經(jīng)改變了搬運的方法。

但又過了一段時間,包工頭EXE把搬運工A給辭退了,從別的工地上找來了另一個DLL(暫且稱為“搬運工B”)。這個搬運工在別的工地的時候,搬運東西特別快,所以包工頭EXE決定把搬運工作給“升級”一下。但真正開始工作時,包工頭才發(fā)現(xiàn)出了問題……現(xiàn)在不管叫幾遍“來!搬。”這個新來的搬運工B都不知道究竟應(yīng)該搬什么。

上面的例子中,搬運工A改進搬運方法,但EXE調(diào)用它的方法仍不變,這就是DLL升級的原理,改進了內(nèi)部的實現(xiàn)方法,但調(diào)用接口不變,這樣EXE文件不用跟著升級,就能調(diào)用新版本的DLL了。而搬運工B的故事說明,不管新版本的DLL效率多高,如果接口(可以理解為DLL中輸出的函數(shù)名)與原來的不一致,那么EXE就不知道也無法調(diào)用它了。

2.登記身份證的DLL

在系統(tǒng)故障中,有很多都是由于DLL文件沒有注冊造成的,比如Windows XP的壓縮文件夾功能出現(xiàn)故障就很有可能是系統(tǒng)目錄中的zipfldr.dll沒有注冊造成的,這類故障的解決方法也大多是運行如下命令:

regsvr32 DLL文件名

很多人不理解為什么要這么做,是不是所有的DLL都能這樣做呢?

其實系統(tǒng)中有兩種DLL,一種是不需注冊即可使用的,另一種則是必須經(jīng)過系統(tǒng)登錄(即注冊)才能使用的。就好像一個臨時工,和一個記錄在員工名單上的長期合同工的區(qū)別一樣。如何才能區(qū)分這兩種DLL呢?方法很簡單,用剛才的Depends打開這個DLL,同樣是看函數(shù)輸出表,如果其中包含以下兩個函數(shù)(前者是注冊DLL,后者是反注冊DLL),那么就一定是需要注冊才能使用的DLL了。

DllRegisterServer

DllUnregisterServer

而regsvr32這個命令,實際上就是調(diào)用DLL中的這兩個函數(shù)(“regsvr32 /u DLL文件名”調(diào)用的即為DllUnregisterServer反注冊函數(shù))。

3.插件DLL的秘密

Winamp、Foobar 2000等很多軟件都具有插件功能,從網(wǎng)上下載一個DLL放在插件目錄下就能讓程序支持新的功能,這是怎么做到的呢?就拿時下流行的播放軟件“千千靜聽”來舉例吧。“千千靜聽”的插件目錄在該軟件安裝目錄下的Addin子目錄下,程序的插件目錄一般都會以“Plugins”、“Addin”來命名。在“千千靜聽”的插件目錄中有許多DLL文件,比如tt_asf.dll、tt_rm.dll等,從文件名中就能看出這些DLL是用來讓這個播放器支持各種不同類型的音頻文件的。同樣,用Depends打開這些文件,你就會發(fā)現(xiàn)這些文件的輸出函數(shù)表中都包括一個同樣的函數(shù):ttpGetSoundAddIn.

5、Dll的丟失原因解析

DLL文件可能因為多種原因而丟失。最普遍的情況是軟件安裝或卸載時不當(dāng)操作導(dǎo)致的注冊表出現(xiàn)引用錯誤或DLL文件被誤刪。肆虐的病毒或惡意軟件入侵亦會刪除或損壞DLL文件。另外,硬件的問題,如硬盤故障或內(nèi)存條受損,也可能導(dǎo)致DLL文件損壞或消失。更罕見的情況是,操作系統(tǒng)進行更新或升級時,有些DLL文件可能不再與系統(tǒng)其他部分兼容,從而導(dǎo)致問題。

6、dll文件丟失解決方法

解決DLL文件丟失的問題有幾種不同的方法,以下是一些常用的解決步驟:

重啟計算機:這是最簡單直接的嘗試。許多時候,DLL的問題可能只是暫時性的,重新啟動電腦往往能夠解決此類問題。

使用DLL修復(fù)工具:有專門設(shè)計的工具可以幫助解決缺少DLL文件的問題,非常適合不太熟悉電腦操作的用戶。用戶可以在瀏覽器地址欄輸入網(wǎng)址“dll修復(fù).site”訪問并下載該工具。運行后選擇一鍵修復(fù)功能即可自動修復(fù)電腦中存在的DLL文件問題。
恢復(fù)刪除的DLL文件:如果你知道DLL文件是何時以及如何被刪除的,嘗試還原這個文件可能會解決DLL錯誤。

運行系統(tǒng)文件檢查器(SFC):這是Windows系統(tǒng)自帶的一個工具,它能夠掃描損壞的系統(tǒng)文件(包括某些DLL文件)并進行修復(fù)。

執(zhí)行系統(tǒng)還原:如果DLL文件的缺失是在對系統(tǒng)進行了重大更改之后發(fā)生的,試著執(zhí)行系統(tǒng)還原可能會把系統(tǒng)配置回到出現(xiàn)錯誤之前的狀態(tài)。

重新安裝導(dǎo)致問題的應(yīng)用程序:如果DLL錯誤是在運行某個特定應(yīng)用程序時發(fā)生的,那么重新安裝該軟件很可能會修復(fù)這個問題。

更新驅(qū)動程序:DLL錯誤有時候與過時或缺失的硬件驅(qū)動有關(guān),更新設(shè)備的驅(qū)動程序可能會解決這個問題。

相關(guān)文章

最新評論