在我的应用程序中,我需要检查Windows版本。我在Visual Studio 2013 (v120) platform toolset
中使用了Version Helper functions。但是该程序在Windows XP中不起作用。错误是:
'xxx.exe' is not a valid win32 application
所以我将平台工具集更改为Visual Studio 2013 - Windows XP (v120_xp)
。但在这种情况下,应用程序将无法编译。
错误是:
error C1083: Cannot open include file: 'VersionHelpers.h': No such file or directory
我该怎么办?我可以使用旧的GetVersionEx功能吗? MSDN说:
GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper APIs
但可能我现在应该使用它!
答案 0 :(得分:10)
我已经设法使用Remmy Lebeau的评论解决了这个问题。
我将VersionHelpers.h
的{{1}}和C:\Program Files (x86)\Windows Kits\8.1\Include\um
的{{1}}以及winapifamily.h
的{{1}}复制到了我的项目中,并更改了其中的一些内容。
现在它使用Windows XP工具集进行编译。
我已经对它进行了测试,并且它在所有版本的Windows中都按预期工作。
答案 1 :(得分:0)
如何:尝试手动链接函数和GetProcAddress以查看可用的内容,如果没有新的API,那么旧的必须是,所以你可以使用你设法链接的没有错误。
我假设您正在构建32位或64位,并且两种情况下的操作系统都是兼容的。
编辑:
GetVersionEx(),here从XP中的kerner32.dll导出,因此您可以尝试使用
链接它GetProcAddress()here也有Microsft使用" GetNativeSystemInfo"的建议。
新的API函数
IsWindowsXPOrGreater() // also exported from kernel32.dll and ntdll.dll
也可以使用GetProcAddress()以相同的方式链接。如果找不到您尝试链接的功能,此功能将返回错误,因此您将知道可用的功能。然后你调用可用的那个并获得你需要的版本信息。
您只需要自己定义函数原型而不是使用标题,然后定义两个函数指针,每个函数指针一个,然后最初为它们分配一个NULL值,直到您尝试链接函数。然后一个指针(或两个)将以一个值结束,您可以使用最新的指针来调用链接的API。