DLL是建立在客戶/服務(wù)器通信的概念上,包含若干函數(shù)、類或資源的庫文件,函數(shù)和數(shù)據(jù)被存儲在一個DLL(服務(wù)器)上并由一個或多個客戶導(dǎo)出而使用,這些客戶可以是應(yīng)用程序或者是其它的DLL。DLL庫不同于靜態(tài)庫,在靜態(tài)庫情況下,函數(shù)和數(shù)據(jù)被編譯進(jìn)一個二進(jìn)制文件(通常擴展名為*.LIB),Visual C++的編譯器在處理程序代碼時將從靜態(tài)庫中恢復(fù)這些函數(shù)和數(shù)據(jù)并把他們和應(yīng)用程序中的其他模塊組合在一起生成可執(zhí)行文件。這個過程稱為"靜態(tài)鏈接",此時因為應(yīng)用程序所需的全部內(nèi)容都是從庫中復(fù)制了出來,所以靜態(tài)庫本身并不需要與可執(zhí)行文件一起發(fā)行。
在動態(tài)庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件,引入庫文件包含被DLL導(dǎo)出的函數(shù)的名稱和位置,DLL包含實際的函數(shù)和數(shù)據(jù),應(yīng)用程序使用LIB 文件鏈接到所需要使用的DLL文件,庫中的函數(shù)和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可執(zhí)行文件中,存放的不是被調(diào)用的函數(shù)代碼,而是DLL中所要調(diào)用的函數(shù)的內(nèi)存地址,這樣當(dāng)一個或多個應(yīng)用程序運行是再把程序代碼和被調(diào)用的函數(shù)代碼鏈接起來,從而節(jié)省了內(nèi)存資源。從上面的說明可以看出,DLL 和.LIB文件必須隨應(yīng)用程序一起發(fā)行,否則應(yīng)用程序?qū)a(chǎn)生錯誤。
微軟的Visual C++支持三種DLL,它們分別是:
Non-MFC Dll(非MFC動態(tài)庫)
Regular Dll(常規(guī)DLL)
Extension Dll(擴展DLL)。