MFC ライブラリのバージョン

MFC ライブラリには、ANSI 1 バイトおよびマルチバイト文字セット (MBCS) のコードをサポートしているバージョンと、Unicode (Windows ネイティブの文字セットである UTF-16LE としてエンコード) をサポートしているバージョンがあります。 各 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 の文字列と文字のサポートを使用するようにプロジェクト構成を設定するには、[プロジェクトのプロパティ] ダイアログを使用します。 [構成プロパティ]>[全般] ページで、1 バイト文字セットを使用する場合は、[文字セット] プロパティを [設定しない] に設定します。 マルチバイト文字セットを使用する場合は、このプロパティを [マルチバイト文字セットを使用する] に設定し、UTF-16 としてエンコードされた Unicode を使用する場合は [Unicode 文字セットを使用する] に設定します。

MFC プロジェクトでは、プリプロセッサ シンボル _UNICODE を使用して UTF-16 ワイド文字 Unicode のサポートを示し、_MBCS で MBCS サポートを示します。 これらのオプションをプロジェクト内で同時に使用することはできません。

MFC スタティック ライブラリの名前付け規則

MFC 用のスタティック ライブラリでは、次の名前付け規則を使用します。 ライブラリ名の形式は、次のとおりです

uAFXcd.LIB

ここで、斜体の小文字で示されている文字は、指定子のプレースホルダーです。指定子の意味は、次の表に示されています。

指定子 値と意味
u ANSI/MBCS (N) または Unicode (U)。ダイアログ内の MFC コントロールがないバージョンでは省略
c ダイアログ内に MFC コントロールがあるバージョン (CW) またはないバージョン (NMCD)
d デバッグまたはリリース: D = デバッグ。リリースの場合は指定子を省略

次の表に示すすべてのライブラリは、事前ビルドされて、サポートされているビルド アーキテクチャの \atlmfc\lib ディレクトリにあります。

ライブラリ 説明
NAFXCW.LIB MFC 静的リンク ライブラリ、リリース バージョン
NAFXCWD.LIB MFC 静的リンク ライブラリ、デバッグ バージョン
UAFXCW.LIB Unicode サポート付き MFC 静的リンク ライブラリ、リリース バージョン
UAFXCWD.LIB Unicode サポート付き MFC 静的リンク ライブラリ、デバッグ バージョン
AFXNMCD.LIB MFC ダイアログ コントロールなしの MFC 静的リンク ライブラリ、リリース バージョン
AFXNMCDD.LIB MFC ダイアログ コントロールなしの MFC 静的リンク ライブラリ、デバッグ バージョン

同じベース名と .pdb 拡張子を持つデバッガー ファイルも、各スタティック ライブラリに使用できます。

MFC 共有 DLL の名前付け規則

MFC 共有 DLL も、構造化された名前付け規則に従います。 これにより、どの目的でどの DLL またはライブラリを使用すればよいかを簡単に確認できます。

MFC DLL には、バイナリの互換性を示すバージョン番号があります。 プロジェクト内の互換性を保証するために、他のライブラリやコンパイラ ツールセットと同じバージョンの MFC DLL を使用してください。

[DLL] 説明
MFCversion.DLL MFC DLL、ANSI または MBCS リリース バージョン
MFCversionU.DLL MFC DLL、Unicode リリース バージョン
MFCversionD.DLL MFC DLL、ANSI または MBCS デバッグ バージョン
MFC<バージョン>UD.DLL MFC DLL、Unicode デバッグ バージョン
MFCMversion.DLL Windows フォーム コントロール付き MFC DLL、ANSI または MBCS リリース バージョン
MFCMversionU.DLL Windows フォーム コントロール付き MFC DLL、Unicode リリース バージョン
MFCMversionD.DLL Windows フォーム コントロール付き MFC DLL、ANSI または MBCS デバッグ バージョン
MFCMversionUD.DLL Windows フォーム コントロール付き MFC DLL、Unicode デバッグ バージョン

これらの共有 DLL を使用するアプリケーションまたは MFC 拡張 DLL をビルドするために必要なインポート ライブラリは、DLL と同じベース名を持っていますが、ファイル名拡張子は .lib です。 共有 DLL を使用する場合でも、小さなスタティック ライブラリをコードにリンクする必要があります。このライブラリの名前は、MFCSversion{U}{D}.lib です。

MFC の共有 DLL バージョンに動的にリンクする場合は、アプリケーションからか MFC 拡張 DLL からかにかかわらず、製品を展開するときに、対応する MFCversion.DLL または MFCversionU.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 プロジェクトがインポート ライブラリの MFCversion.LIB または MFCversionU.LIB にリンクされている場合は、DLL と一緒に、対応する MFC 共有 DLL の MFCversion.DLL または MFCversionU.DLL を展開する必要があります。 詳細については、DLL に関するページを参照してください。

関連項目

MFC の一般的なトピック