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

时间:2017-11-07 09:43:11

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

我最近从vs 2013转到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);

1 个答案:

答案 0 :(得分:1)

我也遇到了这个错误,因为包含了一个标题(为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)