通用Windows平台的预处理器定义?

时间:2016-03-17 21:52:06

标签: visual-studio visual-c++ windows-store-apps win-universal-app c-preprocessor

我们有一个C ++库,我们收到了一些支持UWP的请求。我正在调查这个港口。我正在浏览Microsoft的C/C++ Preprocessor Reference | Predefined Macros for Visual Studio 2015,但我没有看到任何与UWP相关的内容。

我找到How to: Use Existing C++ Code in a Universal Windows Platform App,但它们看起来像是那些Metro UI应用的旧定义:

  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

我希望看到一些特定于Windows运行时最新版本的内容。我想到我们可以通过_WIN32_WINNT_WIN10检测Windows 10和UWP,但如果我正在解析Using the Windows Headers,那么会出现这样的宏来自MSDN正确。

另外some APIs are only available for Windows 10 and UWP Windows Store apps,因此我们需要检测何时缺少某些API(例如,Windows Phone 8,Windows Store 8,Windows 10和Windows Store 10)。

用于检测UWP的预处理器宏是什么?

相关问题可能是Detect Windows Kit 8.0 and Windows Kit 8.1 SDKs,但我目前不确定。

1 个答案:

答案 0 :(得分:5)

您提到的宏可以追溯到Windows 8,但是对于服务器应用程序和驱动程序添加了几个,它们仍然是用于通用Windows应用程序的宏。

请注意,特定于UWP的Visual C ++编译器中没有内置的预定义宏。 UWP风格的所有宏都在Windows 10 SDK附带的winapifamily.h标头中定义。您可以在作为SDK的一部分安装的共享包含文件目录中找到它,例如,C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared\winapifamily.h,模块化您的安装驱动器和SDK版本。

winapifamily.h中的注释非常广泛,并且很好地描述了您对这些宏所需的每个用例。您可以将它们用于条件编译,或者通过在函数声明上使用_WINAPI_DEPRECATED_DECLARATION来为UWP不兼容的代码设置弃用警告。

编辑以添加示例:

在您包含winapifamily.h之后的代码中,您可以打开在特定版本的Windows SDK中定义的宏来执行特定于该版本的操作,如下所示: / p>

#include <winapifamily.h>
    // ...
#if defined (WINAPI_FAMILY_SYSTEM)
    // WINAPI_FAMILY_SYSTEM is new to Windows 10, so do Windows 10-specific
    // calls here
#elif (WINAPI_PARTITION_APP == 1)
    // This value is forced to 1 in Windows 8.1, but it's different in
    // Windows 8.0 so make Windows 8.1-specific calls here
#else
    // Make Windows 8.0-specific calls here
#endif

这只是一种(我未经测试)根据读取标题中的内容制作SDK版本特定代码的方法。这与编译器版本(在_MSC_VER_MSC_VER_FULL中定义)或平台NTDDI_*值无关。