适用于Windows XP的版本帮助程序功能

Version Helper functions for Windows XP

本文关键字:帮助程序 功能 版本 Windows XP 适用于      更新时间:2023-10-16

在我的应用程序中,我需要检查windows版本。我在Visual Studio 2013 (v120) platform toolset中使用Version Helper函数。但是该程序在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

但也许我现在应该用它!

我已经用雷米·勒博的评论解决了这个问题。

我将C:Program Files (x86)Windows Kits8.1Includeum中的VersionHelpers.hC:Program Files (x86)Windows Kits8.1Includeshared中的winapifamily.hsdkddkver.h复制到我的项目中,并更改了其中的一些包含。

现在它使用WindowsXP工具集进行编译。

我已经测试过了,它在所有版本的windows中都能正常工作。

如何:尝试手动将函数与GetProcAddress链接以查看可用的函数。如果新的API没有,则旧的必须是,这样您就可以使用您设法链接的函数而不会出错。

我假设您正在构建32位或64位,并且这两种情况下的操作系统都是兼容的。

编辑:

GetVersionEx(),这里是从XP中的kerner32.dll导出的,所以你可以尝试使用链接它

GetProcAddress()也有Microsft使用";GetNativeSystemInfo";。

API新功能

IsWindowsXPOrGreater()   // also exported from kernel32.dll and ntdll.dll

也可以使用GetProcAddress()以相同的方式进行链接。如果找不到您试图链接的函数,此函数将返回一个错误,因此您将知道您有可用的函数。然后你打电话给可用的,并获得你需要的版本信息。

您只需要自己定义函数原型,而不需要使用头,然后定义两个函数指针,每个指针一个,然后最初为它们分配一个NULL值,直到您尝试链接函数为止。然后,一个指针(或两个指针)将以一个值结尾,您可以使用最新的指针来调用链接的API。