静的 Win32 ライブラリの場合、「MFC を使用する」オプションが設定されていることをどのように検出できますか?
すなわち
#ifdef ---BuildingForMFC---
....
#else
...
#endif
静的 Win32 ライブラリの場合、「MFC を使用する」オプションが設定されていることをどのように検出できますか?
すなわち
#ifdef ---BuildingForMFC---
....
#else
...
#endif
シンボル _MFC_VER が定義されていることを常に確認しています。
これは使用されている MFC のバージョン番号です 0x0700 = 7.0
MSDNの「定義済みマクロ」にあります
Win32 コンソールのみを対象とする元のプロジェクトで Visual Studio 2013 を確認したので、MFC サポートを (プロジェクト ウィザードを使用せずに) もう一度追加する必要があります。以下は私の発見です:
マクロ _MFC_VER は、afx.h に含まれる afxver_.h で定義されます。したがって、.cpp ファイルに afx.h を直接または間接的に含めない場合、_MFC_VER マクロが定義されていません。たとえば、afx.h を含まないソース .cpp をプロジェクトに含めると、ファイルは _MFC_VER マクロの定義なしでコンパイルされます。したがって、MFC ライブラリの使用を検出し、オプションで MFC ライブラリをサポートするために C++ コード (たとえば、外部ライブラリ) を適合させることは役に立ちません。
MFC の使用を手動で有効にする場合 (ソリューション エクスプローラーでプロジェクトを選択し、右クリックして [構成プロパティ] -> [全般] -> [MFC の使用] を選択)、次の 2 つの可能性があります。
したがって、私のテスト活動では、ビルド中のプロジェクトに MFC ライブラリが含まれているかどうかを理解するために有効に使用できるのはモード A だけです。
私は、多くのプラットフォーム (Mac OSx、WinX コンソール、WinX MFC、iOS、Unix、Android) をサポートする C++ クロスプラットフォーム ライブラリを維持しており、動的 DLL で MFC を有効にすることが、MFC の存在を透過的に検出する唯一の方法です。たとえば、次のようになります。
#if defined(_AFXDLL)
# include <afx.h>
#endif
明らかに、プロジェクト プリプロセッサ リストに手動でマクロ定義 (_AFX) を追加できます。
シンボル_AFX
は通常、MFC プロジェクトに対して定義されます。