适用于Windows XP的版本帮助程序功能
Version Helper functions for Windows XP
在我的应用程序中,我需要检查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.h
、C:Program Files (x86)Windows Kits8.1Includeshared
中的winapifamily.h
和sdkddkver.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。
- C++调用具有 *this 属性的单个帮助程序函数
- 用于检查值是否为其任何参数的帮助程序函数
- 类型限定宏帮助程序
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- 无法将 2D 数组传递到 c++ 中的帮助程序函数中
- C2783: 无法推断帮助程序函数的模板参数
- 友元函数需要一个帮助程序函数
- 在何处放置与类方法相关的帮助程序函数C++
- 给定概念,SFINAE 帮助程序是否仍在规范中作为未弃用?
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- 如何安装性能数据帮助程序
- 用于向公众公开数据成员的帮助程序结构
- 类参数化与类和帮助程序函数混淆
- 仅具有公共静态方法的帮助程序类
- Ebpf:帮助程序的未定义符号
- 函数和指针帮助:程序生成,但崩溃,没有任何特定错误
- 使用带有 MEX 包装器的帮助程序 C 文件从 MATLAB 2016 调用C++代码时出现问题
- QCoreApplication事件循环和Windows服务控制处理程序功能
- 输入到字符串流并在单个语句中转换为字符串.可以没有帮助程序类
- 适用于Windows XP的版本帮助程序功能