Jef*_*f B 29 c++ visual-c++-6 visual-studio-2012
在将旧的C++项目从Visual Studio 6迁移到Visual Studio 2012时,我们从标准Microsoft平台标头内部发现了一组奇怪的警告:
在线搜索只发现其他一些人遇到此错误.在某些情况下,人们试图使用VS2012来编译传统的DirectX代码 - 我没有这样做.在其他情况下,人们试图使用VS2012来定位Windows XP(使用Update 1中的新选项) - 我正在这样做.
DirectX问题得到了解答,警告将始终告诉您,您正在编译DirectX的过时(Win8之前版本)版本,并且您将不得不忍受它.
Windows XP问题没有得到解答.其他人只是说他们无法重现这个问题.
我复制了它,找到了原因,我在这里写这篇文章是为了帮助遇到这个问题的其他人.
Jef*_*f B 20
进入项目属性,找到"预处理器定义"字段.
除了默认和添加的定义常量之外,您还应该看到一个宏:
%(PreprocessorDefinitions)
Run Code Online (Sandbox Code Playgroud)
这个宏显然带来了一些额外的编译器提供的预处理器定义.我不确定哪个版本的Visual Studio引入了这个宏,但它在Visual Studio 6中不存在.
在Visual Studio 2012中,此宏必须存在于项目的预处理程序定义字段中.在早期版本的Visual Studio中也可能需要它,但我没有测试过这些.
如果缺少此宏,您将看到如上所示的错误消息.
DLR*_*ave 12
更新:
首先看看埃德蒙对这个问题的回答 - 尝试一下.如果它工作,太棒了!如果不是......请尝试以下方法:
原版的:
使用此网页"工作区"标签上提到的解决方法:
即,添加:
#define _USING_V110_SDK71_ 1
Run Code Online (Sandbox Code Playgroud)
...直接在rc文件之前,它包含任何可能包含系统的头,导致此警告.
小智 11
还没有在网上找到解决方案,所以这里对我有用.
我正在用110_xp工具构建一个项目
我收到这些警告......
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57): warning C4005: '__useHeader' : macro redefinition
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\sal.h(2872) : see previous definition of '__useHeader'
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77): warning C4005: '__on_failure' : macro redefinition
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\sal.h(2882) : see previous definition of '__on_failure'
Run Code Online (Sandbox Code Playgroud)
显然,VC 11标头和7.1a sdk标头之间存在不一致.
在我的stdafx.cpp中,我这样做了......
#define _USING_V110_SDK71_
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
......构建问题已经消失.
这是资源编译器警告.解决方案很简单.右键单击解决方案资源管理器中的.rc文件,然后选择"属性".现在转到Resources> General> Preprocessor Definitions,然后添加
%(PreprocessorDefinitions)
Run Code Online (Sandbox Code Playgroud)
对我来说,另一个解决方案有效。
\n\n在项目属性\xe2\x86\x92配置属性\xe2\x86\x92 C/C++ \xe2\x86\x92 General中,我使用以下宏更改了字段Addition Include Directories path to SDK:
\n\n$(WindowsSDK_IncludePath)\n
Run Code Online (Sandbox Code Playgroud)\n\n在此之前,这个字段有我的SDK v7.1的路径,我也有同样的警告。
\n