我有一个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
答案 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。