【问题标题】:What is the best way to determine WinAPI minimum supported client for a program?确定程序的 WinAPI 最低支持客户端的最佳方法是什么?
【发布时间】:2017-05-15 19:56:19
【问题描述】:

我正在使用 Visual C++ 和 Windows API。 在 MSDN 上,每个函数的描述页面都有一个 requirements 部分,其中显示了支持的最小客户端(如下例所示;CreateFile 函数)。

我是否必须手动检查程序中的每个 Win32 函数以确定支持的最低客户端,还是有自动的方法?

【问题讨论】:

  • 或者接受从 Windows XP 到更高版本的任何东西都是事实上的,因为 WinAPI 几乎不会改变。
  • 您几乎需要知道您正在调用哪些函数。定义 WINVER 和相关条件是确保您不使用最低支持版本中不可用的功能的一种方法。在开始编码之前决定这一点,而不是在完成之后。测试也很重要。
  • @t0mm13b 不完全;我已经看到了以 Vista 或 8 作为最低客户端的几个功能。例如,GetActiveProcessorCount 函数来自 Windows 7。
  • 我说大部分你有责任有条件地编译对 api 的调用以适应更新的 Windows。
  • 你不能总是相信“最低支持客户端”所说的。 MSDN 上有大量关于该价值的 API,自 W2K/XP 以来就已经可用,但现在改用 Vista/Win7/8。这里的关键词是supported。当 Microsoft 放弃对给定 Windows 版本的支持时,MSDN 倾向于从大多数文档中删除该版本,包括大多数(不是全部)现有 API 的“最小支持客户端”字段。如果 API 文档有一个“添加到版本”类型的字段(即 假定 应该是“最小支持客户端”)并且不会随着时间而改变,那就太好了,但它们不会t

标签: c++ windows winapi requirements


【解决方案1】:

理想情况下,您应该在您的程序支持的 Windows 版本上实际测试您的程序。如果您直接链接到一个不存在的函数,那么 Windows 将显示一条错误消息,并且该程序根本不会运行。

如 cmets 中所述,您不能完全信任 MSDN 上的版本信息。 CreateFile 自 Windows 95/Win32S/NT3.x 以来就已经存在,但只有 CreateFileA 在非 NT 系统上实际工作,CreateFileW 只是失败并显示“未实现”错误代码。如果您的最低目标是 Windows XP 或更高版本,那么您不必担心 9x/NT 拆分,但您仍应测试您的软件以确保。

如果您更改WINVER,您还需要小心,因为它可以更改某些结构的大小,然后在旧 Windows 版本上被某些功能拒绝。

【讨论】:

  • 你的回忆似乎和我不一样。 W'95 上根本不存在 Win32 *W 函数,这就是为什么您可以拥有 MSLU(Unicode 的 MicroSoft 层)。它将 *W 函数映射到 *A 等价物。
  • @MSalters NT3.x 中的 W 函数在 95 上导出,但除了 MessageBoxW 和 lstrlenW(可能还有一些)之外的所有函数都是失败的简单存根。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2011-08-13
  • 2010-11-13
  • 2015-01-29
  • 1970-01-01
  • 2010-09-30
相关资源
最近更新 更多