2016-04-28 65 views
0

我在檢測Metro UI/Store應用程序,ARM應用程序和應包含的標題時遇到問題。Metro UI/Store應用程序,ARM和錯誤C3861:'Sleep':標識符未找到

我有對VOIDLPVOIDHANDLELPHANDE和一些基本的服務聲明像WaitForMultipleObjectsSleep需要<windows.h>源文件。

#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 

當我打開VS2012 ARM開發者提示並編譯源文件,它會導致:對於一個普通的桌面程序中的以下工作

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'' 
... 

按照Sleep docs MSDN上,我需要包括用於Windows 8,Windows Server 2012和Windows Phone 8.1的<synchapi.h>。所以我改變了包括塊以下基於Operating System Version從MSDN:

// 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 

然後它編譯ARM下,但結果在Visual Studio 2012下破編譯在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 

什麼時我做錯了,我該如何解決?

回答

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 

我需要迫使包括<sdkddkver.h>使WINVER_WIN32_WINNT被分配一個值。我也停止使用_WIN32_WINNT_WIN8

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