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

jww*_*jww 6 visual-studio visual-c++ c-preprocessor windows-store-apps win-universal-app

我们有一个C++库,我们收到了一些支持UWP的请求.我正在调查这个港口.我正在浏览Microsoft的C/C++预处理器参考 Visual Studio 2015的预定义宏,但我没有看到任何与UWP相关的内容.

我找到了如何:在通用Windows平台应用程序中使用现有C++代码,但它们看起来像那些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 Runtime最新版本的特定内容.我以为我们可能能够通过检测Windows 10和UWP _WIN32_WINNT_WIN10,但是如果我正在解析正确使用 MSDN中的Windows标头,则不会出现这样的宏.

此外,一些API仅适用于Windows 10和UWP Windows应用商店应用,因此我们需要检测何时缺少某些API(即Windows Phone 8,Windows Store 8,Windows 10和Windows Store 10).

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


一个相关的问题可能是检测Windows Kit 8.0和Windows Kit 8.1 SDK,但我目前还不确定.

Col*_*son 5

你提到的宏可以追溯到Windows 8,但是对于服务器应用程序和驱动程序有一些补充,它们仍然是用于通用Windows应用程序的宏.

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

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

编辑以添加示例:

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

#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
Run Code Online (Sandbox Code Playgroud)

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