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