2016-04-28 3 views
0

Ich habe Probleme bei der Erkennung Metro UI/Store Apps, ARM-Anwendungen und die Header, die enthalten sein sollten.Metro UI/Store App, ARM und Fehler C3861: 'Sleep': Kennung nicht gefunden

Ich habe eine Quelldatei, die <windows.h> für VOID, LPVOID, HANDLE, LPHANDE und einige Basisdienste Erklärungen wie WaitForMultipleObjects und Sleep muss. Die folgenden Arbeiten für ein herkömmliches Desktop-Programm:

#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) 
# define MYLIB_WIN32_AVAILABLE 
#endif 

#if defined(MYLIB_WIN32_AVAILABLE) 
# define WIN32_LEAN_AND_MEAN 
# include <windows.h> 
#endif 

Wenn ich einen VS2012 ARM Entwickler Prompt öffnen und die Quelldatei kompilieren, führt dies zu:

cl.exe /nologo /D_MBCS /Zi /TP /EHsc /MT /DWINAPI_FAMILY=WINAPI_FAMILY_APP /c wait.cpp 
wait.cpp 
wait.cpp(140) : error C3861: 'Sleep': identifier not found 
wait.cpp(145) : error C3861: 'PulseEvent': identifier not found 
wait.cpp(149) : error C2039: 'WaitForMultipleObjects' : is not a member of '`global namespace'' 
... 

Nach den Sleep docs auf MSDN, ich brauche einschließlich <synchapi.h> für Windows 8, Windows Server 2012 und Windows Phone 8.1. Also änderte es die Include-Block des auf Operating System Version von MSDN basierend Folgendes:

// Windows 8, Windows Server 2012, and Windows Phone 8.1 need <synchapi.h> 
#if (WINVER >= _WIN32_WINNT_WIN8) || (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
#include <synchapi.h> 
#endif 

Dann ist es unter ARM kompiliert, führt aber zu einem gebrochenen Kompilierung unter Visual Studio 2012 auf Windows 7:

1> wait.cpp 
1> c:\users\...\wait.h(26): fatal error C1083: Cannot open include file: 'synchapi.h': No such file or directory 

Was ist Ich mache falsch, und wie repariere ich es?

Antwort

0
// Windows 8, Windows Server 2012, and Windows Phone 8.1 need <synchapi.h> 
#if (WINVER >= _WIN32_WINNT_WIN8) || (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
#include <synchapi.h> 
#endif 

Ich zwinge musste schließen <sdkddkver.h> so dass WINVER und _WIN32_WINNT a-Werte zugewiesen wurden. Ich habe auch gestoppt _WIN32_WINNT_WIN8:

#if (WINVER >= 0x0602) || (_WIN32_WINNT >= 0x0602) 
#include <synchapi.h> 
#endif