Visual studio MFC不支持小于0x0501的WINVER 我有一个C++项目,引用了许多其他的项目/库。这适用于多年前创建的应用程序。大约每年更新一次,并制作一个新版本。多年来,我一直使用Visual Studio 6来更新和构建此应用程序的新版本,没有任何问题

Visual studio MFC不支持小于0x0501的WINVER 我有一个C++项目,引用了许多其他的项目/库。这适用于多年前创建的应用程序。大约每年更新一次,并制作一个新版本。多年来,我一直使用Visual Studio 6来更新和构建此应用程序的新版本,没有任何问题,visual-studio,mfc,Visual Studio,Mfc,我正在尝试切换到Visual Studio 10(现在是VS2013)。最初我遇到了几个警告和错误,它们是由于VS版本之间的兼容性问题引起的。我能照顾大多数人。但是,我仍然对以下错误感到困惑: 错误C1189:#错误:MFC不支持小于0x0501的WINVER。请更改项目属性或预编译头中WINVER的定义。C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv\U w32.h 该错误发生在一些引用的项目库中

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

错误C1189:#错误:MFC不支持小于0x0501的WINVER。请更改项目属性或预编译头中WINVER的定义。C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv\U w32.h

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

我在互联网上搜索了这方面的信息,找到了一些主题,但没有找到我的问题。有人能解释一下这里可能发生的事情吗

提前谢谢。
LA

如果您自己没有定义宏值,那么所有MFC应用程序都会在某个地方定义该宏值。我假设MS在默认情况下删除了自己头文件中的定义,现在强制您显式定义它

因此,要解决您的问题,可以将
#define
放在“预处理器”编译器选项中,或者放在预编译头(即stdafx.h)的顶部


注意
0x501
是对Windows XP的支持
0x600
是Vista,
0x601
是Windows7——记住这一点我有多难过

我在Windows 7和Visual Studio 2013上遇到了相同的错误

在我的例子中,我的项目有一个名为stdafx.h的源文件,在该文件中有

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
我把它改成了

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601
#endif

错误消失。

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


或者你可以在你的代码中提供更高的WIN版本,如“define”\u WIN32\u WINNT 0x601,无论你在哪里出错。

如果你使用
stdafx.h
,你可以将
\define WINVER 0x0501
添加到该文件的顶部。我有一个类似的问题,没有多少
\define
修复它。事实证明,在Visual Studio 2013中,如果右键单击项目,选择“属性”,然后在选项
配置属性->C/C++->“所有选项”
,那里有一个
/DWINVER
。@jinx0r可以应用于VS的所有版本,在编译器选项中定义的设置并不是什么新鲜事,只要看看任何一个makefile。@gibnab我完全同意你的说法。我只想提到的是,
#define
有时会隐藏在您意想不到的选项中。此外,代码中的#define WINVERs没有引起任何重新定义errors@thejinx0rVS2017中没有此类选项。但您仍然可以通过在配置属性->C/C++->命令行->其他选项中添加“/DWINVER=0x0603”这样的选项来实现这一点