默认情况下,WTL使用定义根据WINVER
等使功能可用,就像windows.h
和其他Windows SDK标题一样。
这意味着链接时的现代WTL应用程序只能在XP及更高版本上运行,但仅使用XP可用的功能。如果您包含来自较新平台的功能,则最终会得到与XP不兼容的二进制文件。
有没有办法构建一个WTL应用程序,以便在新系统上它具有现代外观(现代通用控件和常用对话框),同时它仍然可以在XP上运行?我该怎么做呢?
答案 0 :(得分:2)
无法在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版本兼容,没有可能缺少依赖项的静态链接。另一方面,您可以检测运行时环境中是否有特定功能。例如,如果您要使用需要通用控件版本6且在XP中缺少它们的功能,那么您有责任检查可用功能并回退到代码中的相应代码路径。