总结:编译Release版本的时候报Undeclared identifier SetDefaultDllDirectories
from atlcore.h
,但是编译Debug的时候就OK了。进一步的调查表明,_USING_V110_SDK71_
扮演的角色。它应该继承自项目默认值(见下图),但不适用于组合:Release MinDependency 和 v140_xp。
详细信息:我正在将 C++ 本机 ATL 应用程序从 Visual C++ 2005 迁移到 Visual C++ 2015。目标是尽可能长时间地保持 Windows XP 运行版本。因此,为项目设置了 v140_xp 平台工具集。它适用于调试版本。但是,它会导致 Release MinDepency 版本的编译错误。使用 v140(不带 _xp)时,它编译得很好。
这是需要迁移的应用程序的一个分支。我已经成功将其他分支(更早的)迁移到了VC++ 2008、2010、2012和2013。(或者我忘了做某事,或者现在情况不同了。)
我已经看到其他地方也提到过这个错误;但是,原因可能不同。完整的错误行是:
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_
应定义符号——从项目默认值继承。
更新:输出窗口中的错误消息和周围的行:
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 ==========
你能解释一下吗?谢谢