文章詳情頁(yè)
動(dòng)態(tài)鏈接庫(kù) Windows的活動(dòng)大陸
瀏覽:98日期:2023-05-23 17:46:25
在Windows世界中,有無(wú)數(shù)塊活動(dòng)的大陸,它們都有一個(gè)共同的名字――動(dòng)態(tài)鏈接庫(kù)。現(xiàn)在就讓我們走進(jìn)這些神奇的活動(dòng)大陸,找出它們隱藏已久的秘密吧! 初窺門(mén)徑:Windows的基石 隨便打開(kāi)一個(gè)系統(tǒng)目錄,一眼望去就能看到很多擴(kuò)展名DLL的文件,這些就是經(jīng)常說(shuō)的“動(dòng)態(tài)鏈接庫(kù)”,DLL是Dynamic Link Library(即“動(dòng)態(tài)鏈接庫(kù)”)的縮寫(xiě)。從Microsoft公司推出首個(gè)版本的Windows以來(lái),動(dòng)態(tài)鏈接庫(kù)就一直是這個(gè)操作系統(tǒng)的基礎(chǔ)。 1.看看DLL里有什么 與其用晦澀的專(zhuān)業(yè)術(shù)語(yǔ)來(lái)解決DLL是什么,不如先來(lái)看看DLL里有什么。DLL和EXE文件一樣,其中包含的也是程序的二進(jìn)制執(zhí)行代碼和程序所需的資源(比如圖標(biāo)、對(duì)話(huà)框、字符串等),可是為什么要把代碼放在DLL里面,而不是做成EXE呢?其實(shí)DLL中的代碼是以API函數(shù)形式出現(xiàn)的,通俗地說(shuō),DLL中包含的程序代碼都被做成了一個(gè)個(gè)小模塊,應(yīng)用程序通過(guò)按下所需DLL中特定的按鈕,來(lái)調(diào)用DLL中這個(gè)按鈕所代表的功能。在使用“記事本”等程序時(shí),如果要保存文件或打開(kāi)文件,就會(huì)彈出通用文件對(duì)話(huà)框,讓我們選擇文件位置。你可知道,這就是調(diào)用了系統(tǒng)底層DLL中的通用對(duì)話(huà)框界面。 2.系統(tǒng)中幾個(gè)重要的DLL Windows中有3個(gè)非常重要的底層DLL:Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32.dll顧名思義就是內(nèi)核相關(guān)的功能,主要包含用于管理內(nèi)存、進(jìn)程和線(xiàn)程的函數(shù);而User32.dll中包含的則是用于執(zhí)行用戶(hù)界面任務(wù)的函數(shù),比如把用戶(hù)的鼠標(biāo)點(diǎn)擊操作傳遞給窗口,以便窗口根據(jù)用戶(hù)的點(diǎn)擊來(lái)執(zhí)行預(yù)定的事件;GDI32.dll的名稱(chēng)用了縮寫(xiě),全稱(chēng)是Graphical Device Interface(圖形設(shè)備接口),包含用于畫(huà)圖和顯示文本的函數(shù),比如要顯示一個(gè)程序窗口,就調(diào)用了其中的函數(shù)來(lái)畫(huà)這個(gè)窗口。 3.為什么要用DLL 剛才在談到這個(gè)問(wèn)題的時(shí)候,我們只是解釋了DLL將程序代碼封裝成函數(shù)的原理。為什么封裝成函數(shù),就能成為系統(tǒng)中大量使用DLL的理由呢? ①擴(kuò)展應(yīng)用程序 由于DLL能被應(yīng)用程序動(dòng)態(tài)載入內(nèi)存。所以,應(yīng)用程序可以在需要時(shí)才將DLL載入到內(nèi)存中,這讓程序的可維護(hù)性變得很高。比如QQ的視頻功能需要升級(jí),那么負(fù)責(zé)編寫(xiě)QQ的程序員不必將QQ所有代碼都重寫(xiě),只需將視頻功能相關(guān)的DLL文件重寫(xiě)即可。 ②便于程序員合作 這個(gè)和我們最終用戶(hù)關(guān)系不大,僅供了解。我們都知道編程工具有很多,比如VB、VC、Delphi等,如果好幾個(gè)人合作來(lái)編寫(xiě)一個(gè)大的程序,那么可能有的人用VB,有的人用VC,每人負(fù)責(zé)的部分所使用的編程語(yǔ)言都不同,究竟放在哪個(gè)編譯器中進(jìn)行編譯呢?這就好比一群來(lái)自各個(gè)國(guó)家的人在共同編寫(xiě)一篇文章,如果他們所使用的語(yǔ)言都不同,寫(xiě)出來(lái)的文章怎么可能湊到一起呢?而有了DLL后,可以讓VC程序員寫(xiě)一個(gè)DLL,然后VB程序員在程序中調(diào)用,無(wú)需為怎么將它們都編譯為一個(gè)單獨(dú)的EXE而發(fā)愁了。 ③節(jié)省內(nèi)存 如果多個(gè)應(yīng)用程序調(diào)用的是同一個(gè)動(dòng)態(tài)鏈接庫(kù),那么這個(gè)DLL文件不會(huì)被重復(fù)多次裝入內(nèi)存中,而是由這些應(yīng)用程序共享同一個(gè)已載入內(nèi)存的DLL。就好比一個(gè)辦公室中,很少會(huì)為每一個(gè)員工配置一臺(tái)飲水機(jī)的,而是在一個(gè)公共位置放上一個(gè)飲水機(jī),所有需要喝水的職員都可以共用這臺(tái)飲水機(jī),降低了成本又節(jié)約了空間。 ④共享程序資源 包括剛才提到過(guò)的通用文件對(duì)話(huà)框在內(nèi),DLL文件提供了應(yīng)用程序間共享資源的可能。資源可以是程序?qū)υ?huà)框、字符串、圖標(biāo),或者聲音文件等。 ⑤解決應(yīng)用程序本地化問(wèn)題 在下載了某個(gè)程序的漢化包后,打開(kāi)漢化說(shuō)明,經(jīng)常可以看到用下載包中的DLL文件覆蓋掉程序原來(lái)的DLL,漢化就完成了。這些程序都是將執(zhí)行代碼和應(yīng)用程序界面分開(kāi)編寫(xiě)了,所以漢化者只需簡(jiǎn)單地將其中和程序界面相關(guān)的DLL漢化并發(fā)布即可。 求知若渴:探究DLL的真相 誰(shuí)知道DLL里究竟有多少函數(shù),又有誰(shuí)知道EXE調(diào)用了哪個(gè)DLL的哪些函數(shù)?其實(shí),這個(gè)問(wèn)題并不難解決。還記不記得本刊2004年第6期的《無(wú)間盜IV――盜亦有盜》中介紹的分析EXE文件的工具Dependency Walker(以下簡(jiǎn)稱(chēng)Depends,下載地址:http://www.newhua.com/cfan/200517/depends.zip)今天我們要用它當(dāng)探險(xiǎn)工具,把DLL真相探個(gè)通通透透。
標(biāo)簽:
Windows系統(tǒng)
相關(guān)文章:
1. Windows技巧兩則2. 45招精華Windows技巧總匯(下)3. Win10如何修復(fù)windows系統(tǒng)中dll動(dòng)態(tài)鏈接庫(kù)錯(cuò)誤4. Win8運(yùn)行塵埃3提示無(wú)法定位序數(shù)43于動(dòng)態(tài)鏈接庫(kù)xlive.dll怎么辦?5. Win10系統(tǒng)提示無(wú)法定位程序輸入點(diǎn)于動(dòng)態(tài)鏈接庫(kù)kernel32.dll的解決辦法6. 解決win7“無(wú)法定位程序輸入點(diǎn)ucrtbase.abort于動(dòng)態(tài)鏈接庫(kù)”的方法7. WinXP無(wú)法定位序數(shù)459于動(dòng)態(tài)鏈接庫(kù)的解決方法8. WinXP提示“無(wú)法定位程序輸入點(diǎn)于動(dòng)態(tài)鏈接庫(kù)msvcrt.dll上怎么辦?9. unix下的動(dòng)態(tài)鏈接庫(kù)10. win7無(wú)法定位程序輸入點(diǎn)于動(dòng)態(tài)鏈接庫(kù)解決方法
排行榜
