错误C2039:“SetDefaultDllDirectories”:不是全局命名空间的成员

时间:2013-05-22 18:15:25

标签: mfc

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中运行这个程序

6 个答案:

答案 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,然后打开您的项目并进行编译。