午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

動(dòng)態(tài)鏈接庫(kù)(dll)簡(jiǎn)介

 昵稱34122805 2016-06-15

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)存。

DLL 中封裝了很多函數(shù),只要知道函數(shù)的入口地址,就可以被其他程序調(diào)用。

Windows API中所有的函數(shù)都包含在DLL中,其中有3個(gè)最重要的DLL:

  • Kemel32.dll:它包含那些用于管理內(nèi)存、進(jìn)程和線程的函數(shù),例如CreateThread函數(shù);
  • User32.dll:它包含那些用于執(zhí)行用戶界面任務(wù)(如窗口的創(chuàng)建和消息的傳送)的函數(shù),例如 CreateWindow 函數(shù);
  • GDI32.dll:它包含那些用于畫圖和顯示文本的函數(shù)。

靜態(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ù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多