11

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

4

7 回答 7

10

您必须确保在您的项目属性中定义了“_USING_V110_SDK71_”。Visual Studio 会自动为您定义。它通常不会“显示”,因为未勾选“从父级或项目默认值继承”。

当从旧的 atl 项目升级时,我发现这很常见,因为某些原因,stdafx.cpp 没有勾选“从父级或项目默认值继承”。

您应该检查项目设置以及单个 stdafx.cpp 文件设置,以确定在预处理器定义中选中了“从父级或项目默认值继承”复选框。在某些情况下,会检查项目文件的预处理器定义对话框,但不会检查特定 stdafx.cpp 文件的预处理器定义对话框。

于 2013-06-23T06:32:52.270 回答
6

更改包含目录和包含的 SDK 文件夹的顺序对我有用: $(IncludePath);C:\Program Files x86\Microsoft SDKs\Windows\v7.1A\Include

如果我把文件夹放在C:\Program Files %28x86%29\Microsoft SDKs\Windows\v7.1A\Include之前$(IncludePath),我会得到这个错误。

于 2015-11-26T08:44:38.420 回答
4

我也在 VS 2012 上遇到了这个问题。

这是因为您使用的 Windows SDK 7.1在VS 2012 (VC11)中缺少SetDefaultDllDirectories函数调用。您可能会注意到有保护标志以避免使用 undefined 。#ifndef _USING_V110_SDK71_SetDefaultDllDirectories

只需_USING_V110_SDK71_在您的项目中定义,让 SDK 知道您在此工具集中或升级到更高版本的 SDK。

于 2015-11-10T06:29:39.080 回答
0

我在使用 VS2008 时遇到过类似的问题,它无法识别功能。我通过将 DDX_Control 添加到 DoDataExchange(CDataExchange* pDX) 来解决它。

于 2013-08-06T20:30:18.697 回答
0
  1. 首先将以下几行放入 include

    $(VC_IncludePath)
    $(WindowsSDK_IncludePath)

  2. 取消选中复选框“从父级或项目默认值继承”

于 2015-08-25T10:22:17.493 回答
0

我在子分支预处理器/预处理器定义中复制部分 C/C++ 中的 _USING_V110_SDK71_ ,一旦 unchech 从父级继承...并构建项目,然后重新检查此选项并解决问题

于 2018-07-16T06:55:48.700 回答
-1

我遇到过同样的问题 。这个技巧对我有用。当 Visual Studio 无法正确加载开发环境时,就会出现此问题。无法加载环境变量。所以我已经尝试过了,它工作正常。

步骤1

启动您正在使用的 Visual Studio 的命令提示符

步骤 #2 运行此命令。

devenv /useenv

此命令将打开 Visual Studio,然后打开您的项目并进行编译。

于 2016-04-21T06:10:39.377 回答