适用于Windows XP的版本助手功能

时间:2014-11-09 15:37:00

标签: c++ visual-c++ visual-studio-2013 windows-xp

在我的应用程序中,我需要检查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

但可能我现在应该使用它!

2 个答案:

答案 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。