MFC ライブラリは、ANSI の 1 バイトおよびマルチバイト文字セット (MBCS) コードをサポートするバージョンと、Unicode (UTF-16LE、Windows ネイティブ文字セットとしてエンコード) をサポートするバージョンで使用できます。 各 MFC バージョンは、スタティック ライブラリまたは共有 DLL として使用できます。 また、サイズに非常に敏感で、それらのコントロールを必要としないアプリケーションでは、ダイアログ用の MFC コントロールを除外する、より小さな MFC スタティック ライブラリ バージョンもあります。 MFC ライブラリは、x86、x64、ARM プロセッサを含むサポートされているアーキテクチャのデバッグ バージョンとリリース バージョンの両方で使用できます。 MFC ライブラリの任意のバージョンで、アプリケーション (.exe ファイル) と DLL の両方を作成できます。 マネージ コードとやり取りするためにコンパイルされた MFC ライブラリのセットもあります。 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 などの 1 バイト文字セットと、Shift-JIS などのマルチバイト文字セットの両方がサポートされています。 MFC Unicode ライブラリ バージョンでは、UTF-16LE ワイド文字エンコード形式の Unicode がサポートされています。 UTF-8 でエンコードされた Unicode サポートには、MFC の ANSI/MBCS ライブラリ バージョンを使用します。
IDE で 1 バイト、マルチバイト、またはワイド文字の Unicode 文字列と文字サポートを使用するようにプロジェクト構成を設定するには、[ プロジェクトのプロパティ] ダイアログを使用します。 [ 構成プロパティ>General ] ページで、[ 文字セット ] プロパティを [未設定 ] に設定して、1 バイト文字セットを使用します。 プロパティをマルチ バイト文字セットを使用してマルチバイト文字セット を使用するか、 Unicode 文字セットを使用 して UTF-16 としてエンコードされた Unicode を使用するように設定します。
MFC プロジェクトでは、プリプロセッサ シンボル _UNICODEを使用して UTF-16 ワイド文字 Unicode のサポートを示し、MBCS のサポートを示す_MBCS。 これらのオプションは、プロジェクト内では相互に排他的です。
MFC スタティック ライブラリの名前付け規則
MFC の静的ライブラリでは、次の名前付け規則を使用します。 ライブラリ名の形式は次のとおりです。
uAFXcd.LIB
斜体の小文字で示されている文字は、次の表に示す意味を持つ指定子のプレースホルダーです。
指定子 | 値と意味 |
---|---|
u | ANSI/MBCS (N) または Unicode (U);ダイアログで MFC コントロールを使用しないバージョンの省略 |
c | ダイアログ (CW) またはなし (NMCD) の MFC コントロールを使用したバージョン |
d | デバッグまたはリリース: D=Debug;Release の指定子を省略する |
次の表に示すライブラリはすべて、サポートされているビルド アーキテクチャ用の \atlmfc\lib ディレクトリに事前構築済みで含まれています。
図書館 | 説明 |
---|---|
NAFXCW。LIB | MFC Static-Link ライブラリ、リリース バージョン |
NAFXCWD。LIB | MFC Static-Link ライブラリ、デバッグ バージョン |
UAFXCW。LIB | Unicode をサポートする MFC Static-Link ライブラリ、リリース バージョン |
UAFXCWD。LIB | Unicode をサポートする MFC Static-Link ライブラリ、デバッグ バージョン |
AFXNMCD。LIB | MFC ダイアログ コントロールのない MFC Static-Link ライブラリ、リリース バージョン |
AFXNMCDD。LIB | MFC ダイアログ コントロールのない MFC Static-Link ライブラリ、デバッグ バージョン |
同じベース名と .pdb 拡張子を持つデバッガー ファイルも、各静的ライブラリで使用できます。
MFC 共有 DLL の名前付け規則
MFC 共有 DLL は、構造化された名前付け規則にも従います。 これにより、目的に使用する DLL またはライブラリを簡単に把握できます。
MFC DLL には、バイナリ互換性を示す バージョン 番号があります。 他のライブラリやコンパイラ ツールセットと同じバージョンの MFC DLL を使用して、プロジェクト内の互換性を保証します。
[DLL] | 説明 |
---|---|
MFCバージョン.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バージョン.DLL | MFC DLL と Windows フォーム コントロール、ANSI または MBCS リリース バージョン |
MFCMバージョンU.DLL | Windows フォーム コントロールを使用した MFC DLL、Unicode リリース バージョン |
MFCMバージョンD.DLL | MFC DLL と Windows フォーム コントロール、ANSI または MBCS デバッグ バージョン |
MFCMバージョンUD.DLL | Windows フォーム コントロールを使用した MFC DLL、Unicode デバッグ バージョン |
これらの共有 DLL を使用するアプリケーションまたは MFC 拡張 DLL をビルドするために必要なインポート ライブラリは、DLL と同じベース名を持ちますが、ファイル名拡張子は .lib です。 共有 DLL を使用する場合は、小さなスタティック ライブラリをコードにリンクする必要があります。このライブラリの名前は MFCSバージョン{U}{D}.lib です。
MFC の共有 DLL バージョンに動的にリンクする場合は、アプリケーションまたは MFC 拡張 DLL のどちらからでも、製品を展開するときに、一致する MFCバージョン.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 を作成できます。 これらは、MFC アプリと MFC DLL でのみ使用できる MFC 拡張 DLL と区別するために、"標準 DLL" または "標準 MFC DLL" と呼ばれます。 MFC DLL プロジェクトは プリプロセッサ シンボル_USRDLLを定義するため、MFC 静的ライブラリを使用してビルドされた DLL は、古い参照では USRDLL と呼ばれることもあります。 MFC 共有 DLL を使用する DLL は、 プリプロセッサ シンボル_AFXDLLを定義するため、古い参照では AFXDLL と呼ばれることもあります。
MFC スタティック ライブラリにリンクして DLL プロジェクトを作成すると、MFC 共有 DLL なしで DLL を展開できます。 DLL プロジェクトがインポート ライブラリ MFCバージョンにリンクしている場合。LIB または MFCバージョンU.LIB では、一致する MFC 共有 DLL MFCバージョン.DLLまたは MFCバージョンU.DLLを DLL と共に展開する必要があります。 詳細については、 DLL を参照してください。