虽然这个答案是VS10,它的利益,可能会提供一些线索,这是怎么回事即在VC++目录宏: 警告出现时,在项目的头文件中加入这些声明,MyApp的:
#ifndef NTDDI_WINXPSP3
#define NTDDI_WINXPSP3 0x05010300
#endif
#ifndef NTDDI_VISTA
#define NTDDI_VISTA 0x06000000
#endif
#ifndef NTDDI_VISTASP1
#define NTDDI_VISTASP1 0x06000100
#endif
#ifndef NTDDI_WS08
#define NTDDI_WS08 0x06000100
#endif
警告像下面弹出,但所有的XPSP3 DEF .:
警告RC4005: 'NTDDI_VISTASP1':重新定义C:\ Program Files文件(x86)的\微软的SDK \的Windows \ V7。 0A \ include \ sdkddkver.h ..,MyApp
MyApp的是一个WinDebug 32构建,并指出Windows7.1SDK出现在该凸出文件的X64段:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PlatformToolset>Windows7.1SDK</PlatformToolset>
用于预处理定义继承值为_VC80_UPGRADE =为0x0600。已经使用的SDK工具包恢复到V100之前,SDK库被认为是inherited_from在包含目录和库目录在VC++目录部分,如上所述here。
看起来像警告是由于升级,迁移或工具集更改的组合而产生的。
编辑:在VS2017(MBCS),不相关的问题是选择使用
LoadCursorW(nullptr, IDC_ARROW)
,而不是默认LoadCursorA(...)
在WNDCLASSEXW结构。一种可能的解决方案是重新定义像这样:
#define IDC_ARROW MAKEINTRESOURCEW(32512)
这里该警告可以通过使用抑制了#undef
procedure到#define
之前:
#ifdef IDC_ARROW
#undef IDC_ARROW
#endif
#define IDC_ARROW MAKEINTRESOURCEW(32512)
默认情况下,此宏是在从VS2005迁移到VS2012时添加的,在我的情况下没有帮助。有一次,我将SDK include目录从v7.1A更改为版本为8.0的$(WindowsSDK_IncludePath),所有警告都已发布。 – alex555
我有%(PreprocessorDefinitions),我仍然收到警告。$(WindowsSDK_IncludePath)解决方案为我工作。 –
当单个源文件具有覆盖项目定义的预处理器定义时,也会发生这种情况。 –