InitializeCriticalSectionEx n’est pas membre de l’espace de noms global dans atlwinverapi.h

J’ai récemment changé de vs 2013 à vs 2017. Nous avons ce projet qui a ces définitions de préprocesseur:

WIN32 DRG_BUILD_DLL WINVER=0x0600 

Maintenant, dans atlwinverapi.h je reçois le atlwinverapi.h : InitializeCriticalSectionEx n’est pas membre de l’espace de noms global. Des idées pourquoi ce problème se produit?

 #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); 

J’ai aussi eu cette erreur, car un en-tête (écrit pour MSVC12) inclus

 #define _WIN32_WINNT 0x502 //NTDDI_VERSION 

Le correctif était de supprimer cette ligne.

Cela a résolu le C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\um\synchapi.h car C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\um\synchapi.h contient

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