1

我需要将我的应用程序从 Visual Studio 2005 IDE 升级到 Visual Studio 2012。升级向导成功转换解决方案和项目文件,出现 0 个错误和少量警告。

但是当我开始构建应用程序时,我收到错误消息:

错误 C1189:#error:此文件要求 _WIN32_WINNT 至少 #定义为 0x0403。建议使用 0x0501 或更高的值。在 atlcore.h 中!

我尝试将版本号更改为 0x0500 、 0x0501 、 0x0502 和 0x0601 (通过 /D 编译器选项和在 atlcore.h 中手动更改,WINVER 也更改了。)但没有运气。显示相同的错误。

我哪里错了?

4

3 回答 3

4

Visual C++ 不再支持面向 Windows 95、Windows 98、Windows ME 或 Windows NT。如果将 WINVER 或 _WIN32_WINNT 宏分配给这些 Windows 版本之一,则必须修改宏。

要修改宏,请在头文件中添加以下行。

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

编辑:

WINVER 确定构建您的应用程序所需的最小平台 SDK,这反过来将在编译时确定哪些例程由标头找到。

#define _WIN32_WINNT_NT4     0x0400
#define _WIN32_WINNT_WIN2K     0x0500
#define _WIN32_WINNT_WINXP     0x0501
#define _WIN32_WINNT_WS03     0x0502
#define _WIN32_WINNT_WIN6     0x0600
#define _WIN32_WINNT_VISTA     0x0600
#define _WIN32_WINNT_WS08     0x0600
#define _WIN32_WINNT_LONGHORN    0x0600
#define _WIN32_WINNT_WIN7     0x0601

其他解决方案:

如果您在 PC 上安装了 WIndows SDK(在 /Microsoft SDKs/Windows 中),则可以在 stdafx.h 中(或在所有 C++ 文件中包含的标头中)#include。包括SDKDDKVer.h将针对可用的最高 Windows 版本。

希望它有效!!!!

欲了解更多信息,请参见此处

于 2012-11-02T05:56:19.093 回答
0

通过评论 atlcore.h 中的检查暂时解决了问题:

如果 _WIN32_WINNT > 0x0501

//#error 这个文件要求 _WIN32_WINNT 至少被定义为 0x0403。建议使用 0x0501 或更高的值。

万一

我知道这不是 [编辑 IDE 提供的文件] 的正确方法,但这样做是因为它可能是由于安装不当造成的。

如果有人遇到永久性修复,请告诉我。

于 2012-11-02T13:50:41.047 回答
0

you can add a pre-processor directive for the project under project settings, C/C++, Pre-processor definitions, appending WINVER=0x0501;

(you can also undefine definitions)

I'm wondering if you are using pre-compiled headers which is overwriting changes to stdafx.h, this is the way to make sure this is set

This preprocessor setting holds until code in the project files changes it, at which point if this doesn't fix the problem, then you must find how or where this is being set/unset/checked; but the solutions shouldn't involve any changes to the windows SDK files

于 2014-06-04T11:06:22.190 回答