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 。