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?