我最近从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)