【发布时间】:2010-11-14 20:55:29
【问题描述】:
对于静态 Win32 库,如何检测是否设置了任何“使用 MFC”选项?
即
#ifdef ---BuildingForMFC---
....
#else
...
#endif
【问题讨论】:
标签: c++ mfc visual-c++-2008
对于静态 Win32 库,如何检测是否设置了任何“使用 MFC”选项?
即
#ifdef ---BuildingForMFC---
....
#else
...
#endif
【问题讨论】:
标签: c++ mfc visual-c++-2008
我一直检查符号 _MFC_VER 是否被定义。
这是正在使用的 MFC 的版本号 0x0700 = 7.0
它在 MSDN 的“预定义宏”中
【讨论】:
我已经检查了 Visual Studio 2013,在一个仅针对 Win32 控制台的原始项目中,我必须第二次添加 MFC 支持(不使用项目向导)。以下是我的发现:
宏 _MFC_VER 在 afxver_.h 中定义,包含在 afx.h 中。因此,如果您没有在 .cpp 文件中直接/间接包含 afx.h,则您没有定义 _MFC_VER 宏。例如,在一个项目中包含一个不包含 afx.h 的源 .cpp,该文件将被编译WITHOUT _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 项目定义的。
【讨论】: