2016-04-30 294 views
0

我正在研究Windows平板電腦,Windows手機和Windows應用商店應用程序的測試腳本。這些腳本主要適用於Visual Studio 2012和Windows Kit 8.0 SDK。看來微軟改變了一些事情的Visual Studio 2013和Windows套件8.1 SDK,它導致了失敗:檢測Windows Kit 8.0和Windows Kit 8.1 SDK

cl.exe /nologo /W4 /D_MBCS /Zi /TP /EHsc /MD /FI winapifamily.h /D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 
/DWINAPI_FAMILY=WINAPI_PARTITION_DESKTOP /Yc"pch.h" /Fp"pch.pch" /c pch.cpp 
pch.cpp 
C:\Program Files (x86)\Windows Kits\8.1\include\shared\winapifamily.h(116) : fatal error C1189: 
#error : Unknown WINAPI_FAMILY value. Was it defined in terms of a WINAPI_PARTITION_* value? 
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0 
\VC\BIN\x86_ARM\cl.exe"' : return code '0x2' 

如何被使用,我們可以檢測到的Windows套件SDK?

回答

1

如果您在第115行查看「C:\ Program Files(x86)\ Windows Kits \ 8.1 \ Include \ shared \ winapifamily.h」,您會看到WINAPI_FAMILY值必須是WINAPI_FAMILY_DESKTOP_APP之一, WINAPI_FAMILY_PC_APPWINAPI_FAMILY_PHONE_APP(Windows 10將WINAPI_FAMILY_SYSTEMWINAPI_FAMILY_SERVER添加到混合中)。這意味着,當您爲Windows 8.1或Windows 10構建時,您的命令行標誌/DWINAPI_FAMILY=WINAPI_PARTITION_DESKTOP應改爲/DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP。但是,如果您將其保留,您將獲得所需的默認值 - 請參閱Windows 8.1 SDK版本winapifamily中的第57行。H。

檢查完成後,標題接下來要做的事情是定義WINAPI_PARTITION_*值,該值基於哪個值設置爲WINAPI_FAMILY。請注意,它們全部爲1或0,在Windows 8.0中,WINAPI_PARTITION_APP的值始終爲0x00000002。可以想象,你可以測試是否WINAPI_PARTITION_APP設置爲1,而不是0x00000002,以確定是否使用的SDK是構建8.1應用程序而不是8.0應用程序:

#if defined(WINAPI_PARTITION_APP) 
#if (WINAPI_PARTITION_APP == 0x00000002) 
#define USING_WINDOWS_8_0_SDK 
#endif 
#if defined(WINAPI_FAMILY_SYSTEM) 
#define USING_WINDOWS_10_SDK 
#else 
#if (WINAPI_PARTITION_APP == 1) 
#define USING_WINDOWS_8_1_SDK 
#endif 
#endif 
#endif 

我還沒有真正嘗試過這一點,因爲我的天堂不需要根據使用哪個SDK切換我的代碼。

+0

良好的觀察,這使得它成爲一個很好的黑客:)我需要一些時間來測試它之前我可以接受(我們的測試是相對徹底的,但我會最終回到這個答案)。我也來了解這是不正確的:'/ DWINAPI_FAMILY = WINAPI_PARTITION_DESKTOP'。這在當時看起來還不錯,但我已經開始學習我是在圍繞着微軟的工具鏈工作。當時,我認爲工具鏈是好的,我們的代碼有缺陷。 – jww