如果需要在编译时确定正在使用的Windows SDK的主要操作系统版本,则可以使用ntverp.h中定义的VER_PRODUCTBUILD宏。 例如:
#include
#if VER_PRODUCTBUILD > 9600
// Windows 10+ SDK code goes here
#else
// Windows 8.1- SDK code goes here
#endif
在大多数情况下,这不是必需的,因为应将产品设计为使用特定平台的SDK进行构建。 但是对于某些大型产品,可能需要支持多个平台的SDK。 从一个迁移到另一个时,这尤其有用。 如果头文件中存在错误(例如Windows 8.1 SDK版本的bthledef.h中存在虚假的“ #pragma pop”),则可能需要解决此错误,但在使用Windows 10 SDK时不包括解决方法 或更高。 如果未安装所需的SDK版本,此技术还可用于提供有用的错误消息。
请注意,VER_PRODUCTBUILD仅提供主要的操作系统版本信息,例如8.1与10。这意味着VER_PRODUCTBUILD越来越无用,因为它不会随Windows 10的更新而变化。因此,更可能要看的是sdkddkver.h和 NTDDI_WIN10_ *宏。 从Windows 10.0.17763.0 SDK开始,现在定义了NTDDI_WIN10_RS5。 因此,编写如下代码:
#include
#if !defined(NTDDI_WIN10_RS5)
#error Windows 10.0.17763.0 SDK is required
#endif