【问题标题】:MFC does not support WINVER less than 0x0501MFC 不支持 WINVER 小于 0x0501
【发布时间】:2015-03-20 13:48:06
【问题描述】:

我有一个 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 的任何引用。

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

提前致谢。 洛杉矶

【问题讨论】:

  • 如果您使用stdafx.h,您可以将#define WINVER 0x0501 添加到该文件的顶部。

标签: visual-studio mfc


【解决方案1】:

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

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

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

【讨论】:

  • 我遇到了类似的问题,没有多少#define 解决了它。原来,在 Visual Studio 2013 中,如果你右键单击你的项目,选择属性,然后在选项Configuration Properties -> C/C++ -> All Options 中,那里有一个/DWINVER
  • @thejinx0r 这可以适用于所有版本的VS,在编译器选项中设置定义并不是什么新鲜事,只需查看任何makefile。
  • @gibnab 我完全同意你的说法。我只是想提一下,#defines 有时会隐藏在您没想到的选项中。此外,代码中的#define WINVERs 没有引发任何重定义错误
  • @thejinx0r VS2017 中没有这样的选项。但是您仍然可以通过将“/DWINVER=0x0603”添加到配置属性 -> C/C++ ->命令行->附加选项中来做到这一点
【解决方案2】:

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

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

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

我改成

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x601
#endif

错误消失了。

【讨论】:

    【解决方案3】:

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

    或者您可以在代码中提供更高的 WIN VERSION 为 #define _WIN32_WINNT 0x601 ,无论您遇到什么错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-04
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2014-06-06
      相关资源
      最近更新 更多