InitializeCriticalSectionEx

InitializeCriticalSectionEx

我最近从vs 2013移到了vs2017。我们有一个具有以下预处理程序定义的项目:

WIN32
DRG_BUILD_DLL
WINVER=0x0600

现在在atlwinverapi.h中,我收到以下错误消息:InitializeCriticalSectionEx不是全局 namespace 的成员。任何想法为什么会发生此问题?
#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);

最佳答案

我也收到此错误,因为其中包含一个标题(为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)

07-25 22:28