c++ - InitializeCriticalSectionEx 不是 atlwinverapi.h 中全局命名空间的成员

标签 c++ sdk visual-studio-2017 atl preprocessor

我最近从 vs 2013 转移到 vs 2017。我们有这个项目有这些预处理器定义:

WIN32
DRG_BUILD_DLL
WINVER=0x0600

现在在 atlwinverapi.h 中,我收到此错误,指出 InitializeCriticalSectionEx 不是全局命名空间的成员。任何想法为什么会发生这个问题?

#if (NTDDI_VERSION >= NTDDI_VISTA) && !defined(_USING_V110_SDK71_) && !defined(_ATL_XP_TARGETING)
    // InitializeCriticalSectionEx is available in Vista or later, desktop or store apps
    return ::InitializeCriticalSectionEx(lpCriticalSection, dwSpinCount, Flags);

最佳答案

我也遇到了这个错误,因为包含了一个 header (为 MSVC12 编写)

#define _WIN32_WINNT 0x502 //NTDDI_VERSION

修复是删除这一行。

这修复了它,因为 C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\um\synchapi.h 包含

#if (_WIN32_WINNT >= 0x0600)
    InitializeCriticalSectionEx(
        _Out_ LPCRITICAL_SECTION lpCriticalSection,
        _In_ DWORD dwSpinCount,
        _In_ DWORD Flags
    );
#endif // (_WIN32_WINNT >= 0x0600)

关于c++ - InitializeCriticalSectionEx 不是 atlwinverapi.h 中全局命名空间的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47154505/

相关文章:

javascript - 使用 QuickBlox 进行文本聊天 (IM)

android - SDK platform-tools 版本(24.0.1)太旧,无法检查使用API​​ 25编译的API;请更新

iphone - 应用程序刚刚批准在 iPad 上崩溃

c++ - 从 D 调用 C++

c++ - Gstreamer 动态更改源元素

visual-studio - Visual Studio 2017 HRESULT : 0x80004004

wpf - 尝试在 Visual Studio 2017 中查看应用程序属性页面时出错

visual-studio - 更改 Visual Studio 2017 RC 的语言

c++ - 为什么 boost::adaptors::filtered 的输出没有名为 size 的成员?

c++ - 通过 for 语句转到 for 循环中的下一个元素不是一般的方式