对于静态 Win32 库,如何检测是否设置了任何“使用 MFC”选项?
IE
#ifdef ---BuildingForMFC---
....
#else
...
#endif
对于静态 Win32 库,如何检测是否设置了任何“使用 MFC”选项?
IE
#ifdef ---BuildingForMFC---
....
#else
...
#endif
我一直检查正在定义的符号 _MFC_VER。
这是正在使用的 MFC 的版本号 0x0700 = 7.0
它位于 MSDN 的“预定义宏”中
我已经在仅针对 Win32 控制台的原始项目中检查了 Visual Studio 2013,因此我必须第二次添加 MFC 支持(不使用项目向导)。以下是我的发现:
宏 _MFC_VER 在 afxver_.h 中定义,包含在 afx.h 中。因此,如果您没有在 .cpp 文件中直接/间接包含 afx.h,则您没有定义 _MFC_VER 宏。例如,在项目中包含一个不包含 afx.h 的源 .cpp,该文件将在没有 _MFC_VER 宏定义的情况下进行编译。因此,调整 c++ 代码(例如外部库)来检测 MFC 库的使用并可选地支持 MFC 库是没有用的。
如果您手动打开使用 MFC(在解决方案资源管理器中选择项目,而不是右键单击,配置属性 -> 常规 -> 使用 MFC)您有两种可能性:
因此,在我的测试活动中,只有模式 A 可以有效地用于了解 MFC 库是否包含在正在构建的项目中。
我维护了一个支持许多平台(Mac OSx、WinX 控制台、WinX MFC、iOS、Unix、Android)的 C++ 跨平台库,并且使用动态 DLL 启用 MFC 是透明检测 MFC 存在的唯一方法。例如:
#if defined(_AFXDLL)
# include <afx.h>
#endif
显然,您可以在项目预处理器列表中手动添加宏定义 (_AFX)。
该符号_AFX
通常是为 MFC 项目定义的。