【问题标题】:Build Issues after Upgrading app from vs2005 to vs2012将应用程序从 vs2005 升级到 vs2012 后的构建问题
【发布时间】:2012-11-02 05:47:51
【问题描述】:

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

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

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

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

我哪里出错了?

【问题讨论】:

  • atlcore.h 是系统文件,不要改!

标签: visual-c++ visual-studio-2012 build-error


【解决方案1】:

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 版本。

希望它有效!!!!

欲了解更多信息SEE HERE

【讨论】:

  • 如建议的那样,我曾尝试将其放入 stdafx.h (这会导致相同的错误),如果我将其放入 atlcore.h 中(我会收到一个警告,因为每个文件都会重新定义 winver)但这次我得到了其他错误。如果放入 atlcore.h 是正确的方法如何解决警告。
  • c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(34): 警告 C4005: 'WINVER' : 宏重新定义 1> c:\program文件 (x86)\windows kits\8.0\include\shared\sdkddkver.h(211) :请参阅以前的 'WINVER' 定义 1>c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\ atlcore.h(35): 警告 C4005: '_WIN32_WINNT' : 宏重定义 1> e:\repository\mycomputer\source\native\application\agent\include\stdafx.h(20) : 见之前的 '_WIN32_WINNT' 定义
  • 无论我做什么,错误信息都是一样的。感谢您的指点。需要进一步调查。
  • 通过评论 atlcore.h 中的检查暂时解决了问题
【解决方案2】:

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

如果 _WIN32_WINNT > 0x0501

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

endif

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

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

【讨论】:

    【解决方案3】:

    您可以在项目设置、C/C++、预处理器定义下为项目添加预处理器指令,附加 WINVER=0x0501;

    (您也可以取消定义)

    我想知道您是否正在使用预编译的头文件,它会覆盖对 stdafx.h 的更改,这是确保已设置的方法

    此预处理器设置一直有效,直到项目文件中的代码更改它,此时如果这不能解决问题,那么您必须找到设置/取消设置/检查的方式或位置;但解决方案不应涉及对 Windows SDK 文件的任何更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多