DLL 是 Dynamic Link Library 的縮寫,譯為“動(dòng)態(tài)鏈接庫(kù)”。DLL也是一個(gè)被編譯過(guò)的二進(jìn)制程序,可以被其他程序調(diào)用,但與 exe 不同,DLL不能獨(dú)立運(yùn)行,必須由其他程序調(diào)用載入內(nèi)存。
靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)1) 靜態(tài)庫(kù)函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(通常擴(kuò)展名為.LIB)。在使用靜態(tài)庫(kù)的情況下, 在編譯鏈接可執(zhí)行文件時(shí),鏈接器從庫(kù)中復(fù)制這些函數(shù)和數(shù)據(jù)并把它們和應(yīng)用程序的其他模塊組合起來(lái)創(chuàng)建最終的可執(zhí)行文件(.EXE文件)。當(dāng)發(fā)布產(chǎn)品時(shí),只需要發(fā)布這個(gè)可執(zhí)行文件,并不需要發(fā)布被使用的靜態(tài)庫(kù)。2) 動(dòng)態(tài)庫(kù)在使用動(dòng)態(tài)庫(kù)的時(shí)候,往往提供兩個(gè)文件:一個(gè)引入庫(kù)(.lib)文件和一個(gè)DLL (.dll) 文件。雖然引入庫(kù)的后綴名也是“l(fā)ib”,但是,動(dòng)態(tài)庫(kù)的引入庫(kù)文件和靜態(tài)庫(kù)文件有著本質(zhì)上的區(qū)別,對(duì)一個(gè)DLL來(lái)說(shuō),其引入庫(kù)文件(.lib)包含該DLL導(dǎo)出的函數(shù)和變量的符號(hào)名,而.dll文件包含該DLL實(shí)際的函數(shù)和數(shù)據(jù)。在使用動(dòng)態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),只需要鏈接該DLL的引入庫(kù)文件,該DLL中的函數(shù)代碼和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,直到可執(zhí)行程序運(yùn)行時(shí),才去加載所需的DLL,將該DLL映射到進(jìn)程的地址空間中,然后訪問(wèn)DLL中導(dǎo)出的函數(shù)。這時(shí),在發(fā)布產(chǎn)品時(shí),除了發(fā)布可執(zhí)行文件以外,同時(shí)還要發(fā)布該程序?qū)⒁{(diào)用的動(dòng)態(tài)鏈接庫(kù)。使用動(dòng)態(tài)鏈接庫(kù)的好處1) 可以采用多種編程語(yǔ)言來(lái)編寫我們可以采用自己熟悉的開發(fā)語(yǔ)言編寫DLL,然后由其他語(yǔ)言編寫的可執(zhí)行程序來(lái)調(diào)用這些DLL。例如,可以利用VB來(lái)編寫程序的界面,然后調(diào)用利用VC++或Delphi編寫的完成程序業(yè)務(wù)邏輯的DLL。2) 增強(qiáng)產(chǎn)品的功能在發(fā)布產(chǎn)品時(shí),可以發(fā)布產(chǎn)品功能實(shí)現(xiàn)的動(dòng)態(tài)鏈接庫(kù)規(guī)范,讓其他公司或個(gè)人遵照這個(gè)規(guī)范開發(fā)自己的DLL,以取代產(chǎn)品原有的DLL,讓產(chǎn)品調(diào)用新的DLL,從而實(shí)現(xiàn)功能 的增強(qiáng)。在實(shí)際工作中,我們看到許多產(chǎn)品都提供了界面插件功能,允許用戶動(dòng)態(tài)地更換程序的界面,這就可以通過(guò)更換界面DLL來(lái)實(shí)現(xiàn)。3) 提供二次開發(fā)的平臺(tái)在銷售產(chǎn)品的同時(shí),可以采用DLL的形式提供一個(gè)二次開發(fā)的平臺(tái),讓用戶可以利用該DLL調(diào)用其中實(shí)現(xiàn)的功能,編寫符合自己業(yè)務(wù)需要的產(chǎn)品,從而實(shí)現(xiàn)二次開發(fā)。4) 簡(jiǎn)化項(xiàng)目管理在一個(gè)大型項(xiàng)目開發(fā)中,通常都是由多個(gè)項(xiàng)目小組同時(shí)開發(fā),如果采用串行開發(fā),則效率是非常低的。我們可以將項(xiàng)目細(xì)分,將不同功能交由各項(xiàng)目小組以多個(gè)DLL的方式實(shí)現(xiàn),這樣,各個(gè)項(xiàng)目小組就可以同時(shí)進(jìn)行開發(fā)了。5) 可以節(jié)省磁盤空間和內(nèi)存如果多個(gè)應(yīng)用程序需要訪問(wèn)同樣的功能,那么可以將該功能以DLL的形式提供,這樣在機(jī)器上只需要存在一份該DLL文件就可以了,從而節(jié)省了磁盤空間。另外,如果多個(gè)應(yīng)用程序使用同一個(gè)DLL,該DLL只需要放入內(nèi)存一次,所有的應(yīng)用程序就都可以共亨它了。這樣,內(nèi)存的使用將更加有效。我們知道,當(dāng)進(jìn)程被加載時(shí),系統(tǒng)會(huì)為它分配內(nèi)存,接著分析該可執(zhí)行模塊,找到該程序?qū)⒁{(diào)用哪些DLL,然后系統(tǒng)搜索這些DLL,找到后就加載它們,并為它們分配內(nèi)存空間。DLL的內(nèi)存空間只有一份,如果有第二個(gè)程序也需要加載該DLL,那么它們共享內(nèi)存空間,相同的DLL不會(huì)再次加載。 6) 有助于資源的共享DLL可以包含對(duì)話框模板、字符串、圖標(biāo)和位圖等多種資源,多個(gè)應(yīng)用程序可以使用DLL來(lái)共享這些資源。在實(shí)際工作中,可以編寫一個(gè)純資源的動(dòng)態(tài)鏈接庫(kù),供其他應(yīng)用程序訪問(wèn)。7) 有助于實(shí)現(xiàn)應(yīng)用程序的本地化如果產(chǎn)品需要提供多語(yǔ)言版本,那么就可以使用DLL來(lái)支持多語(yǔ)言??梢詾槊糠N語(yǔ)言創(chuàng)建一個(gè)只支持這種語(yǔ)言的動(dòng)態(tài)鏈接庫(kù)。 |
|
來(lái)自: 昵稱34122805 > 《文件夾1》