xxx \ _vc \ atlmfc \ include \ atlcore.h(638):错误C2039:“SetDefaultDllDirectories”:不是“全局命名空间”的成员
#ifndef _USING_V110_SDK71_
// the LOAD_LIBRARY_SEARCH_SYSTEM32 flag for LoadLibraryExW is only supported if the DLL-preload fixes are installed, so
// use LoadLibraryExW only if SetDefaultDllDirectories is available (only on Win8, or with KB2533623 on Vista and Win7)...
IFDYNAMICGETCACHEDFUNCTION(L"kernel32.dll", SetDefaultDllDirectories, pfSetDefaultDllDirectories)
{
return(::LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32));
}
#endif
其中的功能都不是由VS实现的 那我该怎么解决这个问题呢? libray有什么问题吗?我在VS2012中运行这个程序
答案 0 :(得分:10)
您必须确保在项目属性中定义了“_USING_V110_SDK71_”。 Visual Studio会自动为您定义。它通常不会“显示”,因为“从父项或项目默认值继承”未取消选中。
我从旧的atl项目升级时发现这种常见,因为某些原因,stdafx.cpp具有“从父项或项目默认值继承”未勾选。
您应检查项目设置以及各个stdafx.cpp文件设置,以确定在预处理器定义中选中“从父项或项目默认值继承”复选框。在某些情况下,会检查Project文件的Preprocessor Definitions对话框,但不检查特定stdafx.cpp文件的Preprocessor Definitions对话框。
答案 1 :(得分:4)
我也在VS 2012上遇到过这个问题。
这是因为您使用的是在 VS 2012 (VC11)中缺少SetDefaultDllDirectories
函数调用的Windows SDK 7.1。您可能会注意到#ifndef _USING_V110_SDK71_
有保护标志以避免使用未定义的SetDefaultDllDirectories
。
只需在项目中定义_USING_V110_SDK71_
即可让SDK知道您在此工具集中或升级到更高版本的SDK。
答案 2 :(得分:3)
更改包含目录和包含的SDK文件夹的顺序对我有用:
$(IncludePath);C:\Program Files x86\Microsoft SDKs\Windows\v7.1A\Include
如果我将文件夹C:\Program Files %28x86%29\Microsoft SDKs\Windows\v7.1A\Include
放在$(IncludePath)
之前,我会收到此错误。
答案 3 :(得分:0)
我使用VS2008遇到了类似的问题,它没有识别出一个功能。我通过将DDX_Control添加到DoDataExchange(CDataExchange * pDX)来解决它。
答案 4 :(得分:0)
我将C / C ++部分的_USING_V110_SDK71_复制到子分支预处理器/预处理器定义中,一旦取消从父级继承...并进行构建项目,然后重新检查此选项并解决了问题
答案 5 :(得分:-1)
我有同样的问题。这招对我有用。当visual studio无法正确加载开发环境时,就出现了这个问题。无法加载环境变量。所以我试过这个并且工作正常。
第1步
启动您正在使用的visual studio的命令提示符
步骤#2 运行此命令。
devenv /useenv
此命令将打开visual studio,然后打开您的项目并进行编译。