#error: MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header.
错误原因解释
这个错误的核心含义是:你当前项目中定义的 WINVER 宏值低于 0x0501(对应 Windows XP 系统),而 MFC(Microsoft Foundation Class)库不支持这么低的 Windows 版本。WINVER 宏用于指定你的程序兼容的最低 Windows 系统版本,MFC 从设计上就要求最低兼容 Windows XP(0x0501)。
解决方案(两种方法,任选其一即可)
方法 1:通过 Visual Studio 项目属性修改(推荐,可视化操作)
- 打开你的 MFC 项目,右键点击项目名称 → 选择「属性」。
- 在弹出的属性窗口中,依次展开:「配置属性」→「C/C++」→「预处理器」。
- 找到「预处理器定义」选项,点击右侧的下拉箭头 → 选择「编辑」。
- 在编辑窗口中,添加或修改以下宏定义:
plaintext
(如果已有WINVER=0x0501 _WIN32_WINNT=0x0501WINVER或_WIN32_WINNT,直接修改其值为 0x0501 即可)。 - 点击「确定」保存,重新编译项目。
方法 2:修改预编译头文件(stdafx.h/pch.h)
如果你的项目使用预编译头(MFC 项目默认使用),可以直接在预编译头文件开头添加宏定义:
cpp
运行
// stdafx.h 或 pch.h 文件的最顶部
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
// 以下是原有的头文件包含(比如 MFC 相关头文件)
#include <afxwin.h> // MFC 核心头文件
#include <afxext.h> // MFC 扩展头文件
// ... 其他头文件
注意:宏定义必须放在所有 #include 语句之前,否则不会生效。
验证是否修复成功
修改完成后,点击 Visual Studio 的「生成」→「重新生成解决方案」:
- 如果编译不再报
WINVER less than 0x0501错误,说明修改生效; - 如果仍有错误,检查是否遗漏了
_WIN32_WINNT宏(该宏与WINVER通常需要保持一致)。
补充说明
0x0501对应 Windows XP,0x0600对应 Windows Vista,0x0601对应 Windows 7,你可以根据实际需求选择更高版本(但不能低于 0x0501);- MFC 不同版本对系统的要求略有差异,但 0x0501 是所有现代 MFC 版本的最低要求,建议直接使用该值。
总结
- 错误根源是
WINVER宏值低于 MFC 要求的 0x0501; - 解决方式是通过项目属性或预编译头文件,将
WINVER和_WIN32_WINNT均定义为 0x0501; - 宏定义必须放在所有头文件包含之前,否则无法生效。
1904

被折叠的 条评论
为什么被折叠?



