MFC 不支持小于 0x0501 的 WINVER

MFC does not support WINVER less than 0x0501

我有一个引用许多其他 projects/libraries 的 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 的引用。

我在互联网上搜索了这方面的信息并找到了一些主题,但没有找到专门针对我的问题的。有人可以阐明这里可能发生的事情吗?

提前致谢。 洛杉矶

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

因此,要解决您的问题,请将 #define 放在 'preprocessor' 编译器选项中,或者放在预编译 header 的顶部(即 stdafx.h) .

注意 0x501 是 Windows XP 支持。 0x600 是 Vista,0x601 是 Windows 7 — 想起那个我是多么难过!

我在 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 _WIN32_WINNT 0x601。