_USING_V110_SDK71_ 未继承 VC++ 2015、v140_xp 中的默认值,发布?

_USING_V110_SDK71_ not inherited from defaults in VC++ 2015, v140_xp, Release?

总结:编译Release版本时报Undeclared identifier SetDefaultDllDirectories from atlcore.h,但编译Debug时正常。进一步调查表明 _USING_V110_SDK71_ 发挥了作用。它应该继承自项目默认值(见下图),但它不是用于组合:Release MinDependency,和v140_xp.

详细信息:我正在将 C++ 本机 ATL 应用程序从 Visual C++ 2005 迁移到 Visual C++ 2015。目标是保持 Windows XP 运行 版本越长越好。因此,为项目设置了 v140_xp Platform Toolset。它适用于调试版本。但是,它会导致 Release MinDepency 版本的编译错误。当使用 v140(没有 _xp)时,编译正常。

这是需要迁移的应用程序分支。 VC++ 2008, 2010, 2012, 2013 其他分支我已经成功迁移到VC++。(或者我忘了做某事,或者现在情况不同了。)

我看到那个错误also mentioned elsewhere;然而,原因可能不同。完整的错误行是:

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644):
error C2065: 'SetDefaultDllDirectories':undeclared identifier

有问题的行用于

的情况
#ifndef _USING_V110_SDK71_

所以,显然那个符号没有定义。我使用的是 Visual Studio 2015 Professional,版本 14.0.23107.0 D14REL,以及 Windows 8.1.

检查项目设置时,应定义 _USING_V110_SDK71_ 符号 -- 从项目默认值继承。

更新: 输出中的错误消息和周围的行 window:

1>------ Build started: Project: Market, Configuration: Release MinDependency Win32 ------
1>  SplashScreen.cpp
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57): warning C4005: '__useHeader': macro redefinition
1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\sal.h(2886): note: see previous definition of '__useHeader'
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77): warning C4005: '__on_failure': macro redefinition
1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\sal.h(2896): note: see previous definition of '__on_failure'
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644): error C2039: 'SetDefaultDllDirectories': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644): error C2065: 'SetDefaultDllDirectories': undeclared identifier
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(646): error C2065: 'LOAD_LIBRARY_SEARCH_SYSTEM32': undeclared identifier
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(470): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(477): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(484): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(491): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(3683): warning C4838: conversion from 'LONG' to 'DWORD' requires a narrowing conversion
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

你能解释一下吗?谢谢

如果您从 Visual Studio 的先前版本转换项目文件,则可能会将某些构建设置(包括预处理器宏定义)发送到每个单独文件的配置设置中。要检查这一点,请右键单击源文件并点击属性,然后导航到预处理器选项卡。如果您在预处理器定义字段中看到粗体文本,那么您就会知道这是您的罪魁祸首。要修复它,您需要让每个文件都继承项目设置,这可能很乏味;我发现最简单的方法是在文本编辑器中加载 vcxproj 并删除有问题的定义。