可以设置Windows SDK兼容性目标吗?

时间:2017-06-21 16:17:57

标签: windows visual-studio compatibility

开发使用Windows SDK的Windows应用程序时,您希望能够从Windows 7运行到Windows 10;有没有办法确保您只使用最老的操作系统支持的功能?

我安装了VS2017,它附带了SDK的v10。

我正在寻找IDE标记功能不可用的方法。

1 个答案:

答案 0 :(得分:1)

不幸的是,WINVER_WIN32_WINNTNTDDI_VERSION定义了控制哪些功能可见"可见"设计很差,因为它们适用于常数和函数。

这意味着您必须将这些定义设置为您支持的最旧版本,并为使用GetProcAddress调用的新函数(如果有)手动定义常量和结构。

如果将它们设置为最高版本,则可能会增加某些结构的大小,这将破坏旧版Windows上的struct.cbStruct = sizeof(struct)模式。 (当应用程序在9x / NT4上运行时,Windows 2000+ SDK打破了OPENFILENAMENOTIFYICONDATA结构。)

理想情况下,Windows SDK应该允许您指定两者,标题将如下所示:

#if TARGET_WINMAXVER >= 0x601
typedef enum { FF_BAR = 0x01 } FOOFLAGS;
#endif
#if TARGET_WINMINVER >= 0x601
BOOL WINAPI Foo(FOOFLAGS Flags);
#endif
但遗憾的是,微软从未接受过这一点。这将暴露标志但隐藏功能,因此您始终保持ABI兼容。