开发使用Windows SDK的Windows应用程序时,您希望能够从Windows 7运行到Windows 10;有没有办法确保您只使用最老的操作系统支持的功能?
我安装了VS2017,它附带了SDK的v10。
我正在寻找IDE标记功能不可用的方法。
答案 0 :(得分:1)
不幸的是,WINVER
,_WIN32_WINNT
和NTDDI_VERSION
定义了控制哪些功能可见"可见"设计很差,因为它们适用于常数和函数。
这意味着您必须将这些定义设置为您支持的最旧版本,并为使用GetProcAddress
调用的新函数(如果有)手动定义常量和结构。
如果将它们设置为最高版本,则可能会增加某些结构的大小,这将破坏旧版Windows上的struct.cbStruct = sizeof(struct)
模式。 (当应用程序在9x / NT4上运行时,Windows 2000+ SDK打破了OPENFILENAME
和NOTIFYICONDATA
结构。)
理想情况下,Windows SDK应该允许您指定两者,标题将如下所示:
#if TARGET_WINMAXVER >= 0x601
typedef enum { FF_BAR = 0x01 } FOOFLAGS;
#endif
#if TARGET_WINMINVER >= 0x601
BOOL WINAPI Foo(FOOFLAGS Flags);
#endif
但遗憾的是,微软从未接受过这一点。这将暴露标志但隐藏功能,因此您始终保持ABI兼容。