MFC 程式庫版本

MFC 程式庫適用于支援 ANSI 單位元組和多位元組字元集 (MBCS) 程式碼的版本,以及支援 Unicode 的版本(編碼為 UTF-16LE、Windows 原生字元集)。 每個 MFC 版本都以靜態程式庫或共用 DLL 的形式提供。 此外,還有較小的 MFC 靜態程式庫版本,會排除對話方塊的 MFC 控制項、大小非常敏感的應用程式,而且不需要這些控制項。 MFC 程式庫適用于偵錯和發行版本本,適用于包含 x86、x64 和 ARM 處理器的支援架構。 您可以使用任何版本的 MFC 程式庫來建立應用程式 (.exe 檔案) 和 DLL。 另外還有一組 MFC 程式庫已編譯,以便與 Managed 程式碼互動。 MFC 共用 DLL 包含版本號碼,表示程式庫二進位相容性。

MFC 程式庫版本的自動連結

MFC 標頭檔會根據建置環境中定義的值,自動判斷要連結的正確 MFC 程式庫版本。 MFC 標頭檔會新增編譯器指示詞,指示連結器在特定版本的 MFC 程式庫中連結。

例如,AFX。H 標頭檔會指示連結器在 MFC 的完整靜態、有限靜態或共用 DLL 版本中連結;ANSI/MBCS 或 Unicode 版本;和 偵錯或零售版本,視您的組建組態而定:

#ifndef _AFXDLL
    #ifdef _AFX_NO_MFC_CONTROLS_IN_DIALOGS
        #ifdef _DEBUG
            #pragma comment(lib, "afxnmcdd.lib")
        #else
            #pragma comment(lib, "afxnmcd.lib")
        #endif
        #pragma comment(linker, "/include:__afxNoMFCControlSupportInDialogs")
        #pragma comment(linker, "/include:__afxNoMFCControlContainerInDialogs")
    #endif
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "nafxcwd.lib")
        #else
            #pragma comment(lib, "nafxcw.lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "uafxcwd.lib")
        #else
            #pragma comment(lib, "uafxcw.lib")
        #endif
    #endif
#else
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "d.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "d.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER ".lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER ".lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
        #endif
    #endif
#endif

MFC 標頭檔也包含指示詞以連結所有必要程式庫,包括 MFC 程式庫、Win32 程式庫、OLE 程式庫、從範例建置的 OLE 程式庫、ODBC 程式庫等等。

ANSI、MBCS 和 Unicode

MFC ANSI/MBCS 程式庫版本支援 ASCII 等單位元組字元集,以及 Shift-JIS 等多位元組字元集。 MFC Unicode 程式庫版本在其 UTF-16LE 寬字元編碼形式中支援 Unicode。 針對 UTF-8 編碼的 Unicode 支援,請使用 MFC 的 ANSI/MBCS 程式庫版本。

若要將專案組態設定為使用 IDE 中的單一位元組、多位元組或寬字元 Unicode 字串和字元支援,請使用 [專案屬性 ] 對話方塊。 在 [ 組態屬性一般 ] 頁面中,將 [字元集 ] > 屬性設定為 [未設定 ] 以使用單一位元組字元集。 將 屬性設定為 [使用多位元組字元集 ] 使用多位元組字元集,或使用 Unicode 字元集 來使用以 UTF-16 編碼的 Unicode。

MFC 專案會使用預處理器符號_UNICODE來表示 UTF-16 寬字元 Unicode 支援,_MBCS表示 MBCS 支援。 這些選項在專案中互斥。

MFC 靜態程式庫命名慣例

MFC 的靜態程式庫會使用下列命名慣例。 程式庫名稱的格式如下

u AFX cd .自由

其中顯示為斜體小寫的字母是指定名稱的預留位置,其意義如下表所示:

規範 值和意義
u ANSI/MBCS (N) 或 Unicode (U):省略對話方塊中沒有 MFC 控制項的版本
c 對話方塊中具有 MFC 控制項的版本 (CW) 或不含 (NMCD)
偵錯或發行:D=偵錯 (Debug);省略指定名稱=發行 (Release)

下表所列的所有程式庫都會在 \atlmfc\lib 目錄中預先建置,以取得支援的組建架構。

程式庫 描述
NAFXCW.LIB MFC 靜態連結程式庫,發行版本
NAFXCWD.LIB MFC 靜態連結程式庫,偵錯版本
UAFXCW。自由 MFC 靜態連結程式庫 (支援 Unicode),發行版本
UAFXCWD。自由 MFC 靜態連結程式庫 (支援 Unicode),偵錯版本
AFXNMCD。自由 沒有 MFC 對話方塊控制項的 MFC 靜態程式庫,發行版本本
AFXNMCDD。自由 沒有 MFC 對話方塊控制項的 MFC 靜態程式庫,偵錯版本

具有相同基底名稱和 .pdb 副檔名的偵錯工具檔案也可供每個靜態程式庫使用。

MFC 共用 DLL 命名慣例

MFC 共用 DLL 也會遵循結構化命名慣例。 這可讓您更輕鬆地知道您應該針對哪一個用途使用哪個 DLL 或程式庫。

MFC DLL 具有 指出二進位相容性的版本 號碼。 使用與其他程式庫和編譯器工具組具有相同版本的 MFC DLL,以確保專案內的相容性。

DLL 描述
MFC version.DLL MFC DLL、ANSI 或 MBCS 版本
MFC 版本 U.DLL MFC DLL、Unicode 版本
MFC D.DLL 版 MFC DLL、ANSI 或 MBCS 偵錯版本
MFC 版本 UD.DLL MFC DLL、Unicode 偵錯版本
MFCM version.DLL 具有 Windows Forms 控制項、ANSI 或 MBCS 發行版本的 MFC DLL
MFCM 版本 U.DLL MFC DLL 與 Windows Forms 控制項、Unicode 發行版本本
MFCM D.DLL 版 具有 Windows Forms 控制項、ANSI 或 MBCS 偵錯版本的 MFC DLL
MFCM 版本 UD.DLL MFC DLL 與 Windows Forms 控制項、Unicode 偵錯版本

建置使用這些共用 DLL 的應用程式或 MFC 延伸模組 DLL 所需的匯入程式庫,其基底名稱與 DLL 相同,但副檔名為 .lib。 當您使用共用 DLL 時,小型靜態程式庫仍必須與程式碼連結;此程式庫名為 MFCS 版本 {U}{D}.lib。

如果您要動態連結至 MFC 的共用 DLL 版本,無論是來自應用程式還是 MFC 擴充功能 DLL,當您部署產品時,必須包含相符的 MFC version.DLL 或 MFC 版本 U.DLL。

如需可隨應用程式散發的 Visual C++ DLL 清單,請參閱 適用于 Microsoft Visual Studio 2017 和 Microsoft Visual Studio 2017 SDK 的可散發程式碼(包括公用程式與 BuildServer 檔案) Visual Studio 2019 的可散發程式碼。

如需 MFC 中 MBCS 和 Unicode 支援的詳細資訊,請參閱 Unicode 和多位元組字元集 (MBCS) 支援

您可以使用靜態或共用動態 MFC 程式庫來建立 MFC 和非 MFC 可執行檔可以使用的 DLL。 這些稱為「一般 DLL」或「一般 MFC DLL」,以區分它們與 MFC 擴充 DLL,而 MFC 應用程式和 MFC DLL 只能使用。 使用 MFC 靜態程式庫建置的 DLL 有時在舊版參考中稱為 USRDLL,因為 MFC DLL 專案會定義預處理器符號 _USRDLL 。 使用 MFC 共用 DLL 的 DLL 有時在舊版參考中稱為 AFXDLL,因為它會定義預處理器符號 _AFXDLL

當您藉由連結至 MFC 靜態程式庫來建立 DLL 專案時,您可以部署 DLL,而不需要 MFC 共用 DLL。 當您的 DLL 專案連結至匯入程式庫 MFC 版本 時。LIB 或 MFC 版本 U.LIB,您必須與 DLL 一起部署相符的 MFC 共用 DLL MFC 版本 .DLL 或 MFC 版本 U.DLL。 如需詳細資訊,請參閱 DLL

另請參閱

一般 MFC 主題