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