http://c.biancheng.net/cpp/html/2750.html
遼寧網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。DLL 是 Dynamic Link Library 的縮寫,譯為“動(dòng)態(tài)鏈接庫(kù)”。DLL也是一個(gè)被編譯過的二進(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ù)。
函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(通常擴(kuò)展名為.LIB)。在使用靜態(tài)庫(kù)的情況下, 在編譯鏈接可執(zhí)行文件時(shí),鏈接器從庫(kù)中復(fù)制這些函數(shù)和數(shù)據(jù)并把它們和應(yīng)用程序的其他模塊組合起來創(chuàng)建最終的可執(zhí)行文件(.EXE文件)。當(dāng)發(fā)布產(chǎn)品時(shí),只需要發(fā)布這個(gè)可執(zhí)行文件,并不需要發(fā)布被使用的靜態(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來說,其引入庫(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)程的地址空間中,然后訪問DLL中導(dǎo)出的函數(shù)。這時(shí),在發(fā)布產(chǎn)品時(shí),除了發(fā)布可執(zhí)行文件以外,同時(shí)還要發(fā)布該程序?qū)⒁{(diào)用的動(dòng)態(tài)鏈接庫(kù)。
我們可以采用自己熟悉的開發(fā)語言編寫DLL,然后由其他語言編寫的可執(zhí)行程序來調(diào)用這些DLL。例如,可以利用VB來編寫程序的界面,然后調(diào)用利用VC++或Delphi編寫的完成程序業(yè)務(wù)邏輯的DLL。
在發(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)地更換程序的界面,這就可以通過更換界面DLL來實(shí)現(xiàn)。
在銷售產(chǎn)品的同時(shí),可以采用DLL的形式提供一個(gè)二次開發(fā)的平臺(tái),讓用戶可以利用該DLL調(diào)用其中實(shí)現(xiàn)的功能,編寫符合自己業(yè)務(wù)需要的產(chǎn)品,從而實(shí)現(xiàn)二次開發(fā)。
在一個(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ā)了。
如果多個(gè)應(yīng)用程序需要訪問同樣的功能,那么可以將該功能以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ì)再次加載。
DLL可以包含對(duì)話框模板、字符串、圖標(biāo)和位圖等多種資源,多個(gè)應(yīng)用程序可以使用DLL來共享這些資源。在實(shí)際工作中,可以編寫一個(gè)純資源的動(dòng)態(tài)鏈接庫(kù),供其他應(yīng)用程序訪問。
如果產(chǎn)品需要提供多語言版本,那么就可以使用DLL來支持多語言??梢詾槊糠N語言創(chuàng)建一個(gè)只支持這種語言的動(dòng)態(tài)鏈接庫(kù)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。