2009-07-28 71 views

回答

10

我一直檢查符號_MFC_VER被定義。

這是正在使用0x0700 MFC的版本號= 7.0

這是在「預定義宏」在MSDN

0

_AFX通常用於MFC項目定義的符號。

+0

我也這麼認爲,但是對於Win32庫項目(創建時沒有「MFC支持」選項)啓用「在動態庫中使用MFC」時,未定義此宏。 – peterchen 2009-07-28 21:37:37

+0

@peterchen表示,如果MFC作爲動態庫選項處於活動狀態,則_AFX未定義,而是_AFXDLL。 – Mouze 2015-04-28 07:33:18

3

我已經檢查的Visual Studio 2013年,在原來的項目只針對Win32的控制檯,所以我必須在第二次添加MFC支持(不使用項目嚮導)。以下是我的發現:

  • 宏_MFC_VER在afxver_.h中定義,由afx.h包含。因此,如果您不直接/間接地在.cpp文件中包含afx.h,則沒有定義_MFC_VER宏。例如,在項目中包含一個不包含afx.h的源.cpp,該文件將被編譯爲而不包含 _MFC_VER宏的定義。因此,使用C++代碼(例如外部庫)來檢測MFC庫的使用情況並可選擇支持MFC庫是沒有用的。

  • 如果您手動打開使用MFC(選擇Solution Explorer中的項目,比點擊右鍵,配置屬性 - >常規 - >使用MFC的),你有兩種可能性:

    • A)選擇「在共享DLL中使用MFC」選項。這實際上更新了命令行參數,將_AFXDLL的定義添加到預處理器宏列表中。 B)選擇「在靜態庫中使用MFC」選項。
    • B)選擇「在靜態庫中使用MFC」選項。這實際上刪除了定義的_AFXDLL宏,但沒有添加宏定義,因此如果實際使用了MFC,什麼都不會告訴你。

所以,我的測試活動中,只有一個模式可以有效地使用,如果MFC庫下建設項目包括或不明白。我維護一個支持多種平臺(Mac OSx,WinX控制檯,WinX MFC,iOS,Unix,Android)的C++跨平臺庫並使MFC具有動態DLL是透明地檢測MFC存在的唯一方法。例如:

#if defined(_AFXDLL) 
# include <afx.h> 
#endif 

顯然,您可以在項目預處理器列表中手動添加宏定義(_AFX)。