2016-04-30 22 views
0

私はWindowsタブレット、Windows Phone、Windowsストアアプリのテストスクリプトを作成しています。スクリプトは主にVisual Studio 2012およびWindows Kit 8.0 SDKの下で動作しています。 Microsoftは、Visual Studio 2013およびWindowsキット8.1 SDKのためにいくつかのことを変更し表示され、その故障の原因:Windowsキット8.0およびWindowsキット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

あなたが見れば、 "C:\プログラムファイル(x86の)\ Windowsのキット\ 8.1 \は\共有\のwinapifamily.h含める" をライン115上に、あなたはWINAPI_FAMILY値がWINAPI_FAMILY_DESKTOP_APPの一つであることを持っていることがわかります、 WINAPI_FAMILY_PC_APPまたはWINAPI_FAMILY_PHONE_APP(Windows 10ではWINAPI_FAMILY_SYSTEMWINAPI_FAMILY_SERVERが追加されます)。これは、Windows 8.1または10のビルド時にコマンドラインフラグ/DWINAPI_FAMILY=WINAPI_PARTITION_DESKTOP/DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APPでなければならないことを意味します。ただし、省略した場合、必要なデフォルト値が得られます - winapifamilyのWindows 8.1 SDKバージョンの57行目.h。

チェックの後、次のことは、WINAPI_FAMILYの値が設定されている値に基づいてWINAPI_PARTITION_*の値を定義することです。それらがすべて1または0であることに注意してください.Windows 8.0では、WINAPI_PARTITION_APPの値は常に0x00000002でした。私の避難所以来、私は実際にこれを試していない

#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 

:おそらく、あなたはWINAPI_PARTITION_APPが使用中のSDKは8.0アプリの代わりに8.1アプリケーションを構築したかどうかを判断するために1の代わりに、0x00000002に設定されているかどうかをテストすることができSDKが使用されていることに基づいて自分のコード内で切り替える必要がありました。

+0

これはいいハックです:私は受け入れる前にテストする時間が必要です(私たちのテストは比較的徹底的ですが、最終的にこの回答に戻るでしょう)。私はこれが正しくないことを知るために来た: '/ DWINAPI_FAMILY = WINAPI_PARTITION_DESKTOP'。当時はOKだったようですが、私は壊れたMicrosoftのツールチェーンを取り組んでいたことを知りました。当時、私はツールチェーンが問題なく、コードに欠陥があると思っていました。 – jww

関連する問題