首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在预处理器中检测“使用MFC”

问如何在预处理器中检测“使用MFC”
EN

Stack Overflow用户
提问于 2009-07-28 21:21:09
回答 3查看 4.3K关注 0票数 11

对于静态MFC库,我如何检测是否设置了任何"Use Win32“选项?

即

代码语言:javascript
复制
#ifdef ---BuildingForMFC---
....
#else
...
#endif
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-28 21:38:09

我总是检查正在定义的符号_MFC_VER。

这是正在使用的MFC的版本号0x0700 = 7.0

它在MSDN中的“预定义宏”中

票数 12
EN

Stack Overflow用户

发布于 2015-04-28 02:44:43

我已经检查了Visual Studio2013,在一个只针对Win32控制台的原始项目中,所以我必须在第二次添加MFC支持(不使用项目向导)。以下是我的发现:

  • 宏_MFC_VER在afxver_.h中定义,包含在afx.h中。因此,如果没有在.cpp文件中直接/间接包含afx.h,就没有定义_MFC_VER宏。例如,如果在项目中包含不包含afx.h的源.cpp,则将在没有定义_MFC_VER宏的情况下编译该文件。因此,改编c++代码(例如,外部库)来检测MFC库的使用并可选地支持MFC库是没有用的。
  • 如果手动启用MFC (在解决方案资源管理器中选择项目,然后右键单击,选择Configuration Properties -> General -> use of MFC),则有两个MFC

代码语言:javascript
复制
- A) select "Use MFC in a Shared DLL" option. This actually update the command line parameters adding the definition of \_AFXDLL to the preprocessor macro list.
- B) select "Use MFC in a Static Library" options. This actually remove the \_AFXDLL macro defined, but no macro definition is added, so nothing can told you if MFC is actually used.

​

因此,在我的测试活动中,只有模式A才能有效地了解MFC库是否包含在正在构建的项目中。

我维护了一个C++跨平台库,它支持许多平台(Mac OSx、MFC控制台、MFC MFC、iOS、Unix、Android),使用动态DLL启用MFC是透明检测WinX存在的唯一方法。举个例子:

代码语言:javascript
复制
#if defined(_AFXDLL)
#    include <afx.h>
#endif

显然,您可以在项目预处理器列表中手动添加宏定义(_AFX)。

票数 4
EN

Stack Overflow用户

发布于 2009-07-28 21:30:10

符号_AFX通常是为MFC项目定义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1196808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档