天天看點

2007-12-18 10:48 VC中的dll分析

VC6.0 支援三種dll,如下

Non-MFC Dlls(非MFC dll);指的是不用MFC的類庫結構,直接用C語言寫的DLL,其輸出函數一般是标準的C接口,能被非MFC和MFC編寫的應用程式調用。可以用“Win32 應用程式向導”建立非 MFC DLL 項目。

Regular Dlls(MFC正規DLL),使用“MFC DLL 向導”建立,又分為靜态連結和動态連結兩種。

Extension Dlls(MFC擴充DLL),使用“MFC DLL 向導”建立,始終動态連結MFC。

下面來自MSDN--确定要使用的dll的類型

如果 DLL 要使用 MFC,且将由 MFC 或非 MFC 應用程式使用,則必須生成動态連結到 MFC 的規則 DLL 或靜态連結到 MFC 的規則 DLL。大部分情況下可能需要使用動态連結到 MFC 的規則 DLL,因為這種 DLL 的檔案大小要小得多,且使用共享 MFC 版本會節省大量記憶體。如果是靜态連結到 MFC,則由于 DLL 會加載自己的私有 MFC 庫代碼副本,DLL 的檔案大小會較大,且有可能占用額外的記憶體。

生成動态連結到 MFC 的 DLL 要比生成靜态連結到 MFC 的 DLL 快,因為前者不需連結 MFC 本身。在連結器必須壓縮調試資訊的調試版本中尤其如此。通過與已經包含調試資訊的 DLL 連結,DLL 中将隻有很少的調試資訊需要壓縮。

動态連結到 MFC 的一個缺點是必須用 DLL 釋出共享 DLL:MFCx0.DLL 和 MSVCRT.DLL(或類似的檔案)。MFC DLL 可随便重新釋出,但仍必須在安裝程式中安裝 DLL。另外必須傳遞 MSVCRT.DLL,它包含程式和 MFC DLL 本身都要使用的 C 運作時庫。

如果 DLL 僅由 MFC 可執行檔案使用,則可以選擇生成規則 DLL 或擴充 DLL。如果 DLL 實作從現有 MFC 類派生的可重用類,或如果需要在應用程式和 DLL 之間傳遞 MFC 派生的對象,則必須生成擴充 DLL。

如果 DLL 動态連結到 MFC,則可能要用 DLL 重新釋出 MFC DLL。當在多個可執行檔案之間共享類庫以節省磁盤空間和最小化記憶體使用時,此結構尤其有用。

繼續閱讀