我正在为 Windows 平板电脑、Windows Phone 和 Windows 应用商店应用程序编写测试脚本。这些脚本主要适用于 Visual Studio 2012 和 Windows Kit 8.0 SDK。 Microsoft 似乎更改了 Visual Studio 2013 和 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 Kit SDK?
如果您查看第 115 行的“C:\Program Files (x86)\Windows Kits\8.1\Include\shared\winapifamily.h”,您会看到WINAPI_FAMILY
值必须是其中之一WINAPI_FAMILY_DESKTOP_APP
, WINAPI_FAMILY_PC_APP
, or WINAPI_FAMILY_PHONE_APP
(Windows 10 添加WINAPI_FAMILY_SYSTEM
and WINAPI_FAMILY_SERVER
到混合)。这意味着您的命令行标志/DWINAPI_FAMILY=WINAPI_PARTITION_DESKTOP
应该是/DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
当您为 Windows 8.1 或 10 构建时。但是,如果您省略它,您将获得所需的默认值 - 请参阅 winapifamily.h 的 Windows 8.1 SDK 版本中的第 57 行。
检查后,标头所做的下一步是定义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 在我的代码中进行切换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)