MFC不支持小于0x0501的WINVER

时间:2015-01-21 21:44:49

标签: visual-studio mfc

我有一个C ++项目,它引用了许多其他项目/库。这适用于多年前创建的应用程序。每年大约每年更新一次,并完成新版本。我已经使用Visual Studio 6多年来更新和构建这个应用程序的新版本,没有任何问题。

我正在尝试切换到Visual Studio 10(现在是VS2013)。最初我遇到了几个警告和错误,这是由VS版本之间的兼容性问题引起的。我能够照顾到最多。但是,我仍然对以下错误感到困惑:

error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h

在一些引用的项目库中发生错误。我检查了有问题的项目库,但我找不到任何对WINVER的引用。

我已经在互联网上搜索了这方面的信息并找到了一些主题,但没有任何特定于我的问题。有人可以对这里可能发生的事情有所了解吗?

提前致谢。 LA

3 个答案:

答案 0 :(得分:29)

如果您没有自己定义,则所有MFC应用都会在某处定义WINVER宏值。我假设MS默认在其自己的头文件中删除了该定义,现在强制要求您明确定义它。

因此,要解决您的问题,请将#define放入预处理器'编译器选项,或在预编译头文件的顶部(即stdafx.h)。

注意0x501是Windows XP支持。 0x600是Vista,0x601是Windows 7 - 我记得那个有多难过!

答案 1 :(得分:10)

我在使用Visual Studio 2013的Windows 7上遇到了同样的错误。

在我的情况下,我的项目有一个名为LINE FEED的源文件,在该文件中有

stdafx.h

我把它改成了

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

并且错误消失了。

答案 2 :(得分:1)

默认情况下,WINVER在预处理器中定义为0x0500。要克服此错误,请从以下位置删除定义的获胜版本“ WINVER = 0x0500” 配置属性=> c / c ++ =>“预处理器”选项卡并重建。

或者,无论在哪里出错,都可以在代码中提供更高的WIN VERSION,例如#define _WIN32_WINNT 0x601。