关于C#:构建在XP和更高版本上运行但具有最新功能的WTL程序,我需要哪些选择?

What options do I have to build a WTL program that runs on XP and later but with latest features?

默认情况下,WTL使用定义根据WINVER等使功能可用,就像windows.h和其他Windows SDK标头一样。

这意味着现代的WTL应用程序在链接时只能在XP和更高版本上运行,但仅使用XP可用的功能。如果包含较新平台的功能,则最终会产生与XP不兼容的二进制文件。

是否有一种构建WTL应用程序的方式,使得它在新系统上仍具有可以在XP上运行的现代外观(现代通用控件和通用对话框)?我该怎么办?


无法在XP和XP之前的系统中运行是由于使用最新的Visual C工具集,而不是使用最新的WINVER值。据我所知,最后一个与Windows 2000兼容的C运行时是Visual Studio 2008的" v90 \\" –这是您需要使用的(或者使用非MS编译器?)。对于XP,您需要其中一个工具集:v100,v110_xp,v120_xp。请注意,后缀" _xp"表示这是另一个主流工具集的替代版本,但是与XP不兼容。

也就是说,要定位XP和更高版本,您需要适当的工具集,然后是Visual Studio的版本,是否包含最新的WINVER都无关紧要。

当前版本的WTL和Visual Studio 2008至2013,其中应用了适当的工具集,可构建有效的XP兼容应用程序,同时可能包含最新的SDK定义,并通过高WINVER值将其解锁。

以这种方式构建的应用程序与OS版本兼容,因为它们没有指向可能丢失的依赖项的静态链接。另一种方法是,您可以检测运行时环境中是否有特定功能。例如,如果您要使用需要Common Controls版本6的功能,而XP中缺少这些功能,则您有责任检查可用功能并退回到代码中的相应代码路径。