【问题标题】:List of GetLastError() error codes for every winapi function [closed]每个winapi函数的GetLastError()错误代码列表[关闭]
【发布时间】:2017-12-29 02:03:06
【问题描述】:

是否有提供由 given winapi 函数通过 GetLastError() 返回的错误代码的列表?是否有提供此类文档的官方或非官方资源?

例如,MSDN 上的 winsock 函数文档页面提供了可能的 WSAGetLastError() 代码表,而其他 winapi 函数没有针对给定函数的每个可能错误的此类列表,这是这个问题中解决的确切问题,我在问每个 winapi 函数的类似文档。

要求什么:

  • List of winapi error codes
  • 关于实现错误处理或一些处理错误处理的库的建议
  • 关于使用 FormatMessage() 和类似内容的建议

编辑:我知道this 问题,它处理一个似乎是异常的特定函数(CreateFile),因为第三方文件系统可以提供自己的错误代码,即使大多数函数都属于这种情况,也有仍然应该是最常见/标准的错误代码

提前致谢

【问题讨论】:

  • 没有这样详尽的列表。每个函数的文档都包含它使用的错误代码的部分列表。这就是你得到保证的全部。它可能会设置其他错误代码,也可能不设置任何错误代码。在承诺设置错误代码的功能失败后,您只需检查并查看。
  • @CodyGray 一些功能,其中一些被广泛使用的功能甚至没有提供部分列表
  • 那么您无法保证他们设置了哪些错误代码。您必须通过实验来确定它,这将是脆弱的,因为它可能会在不同版本的操作系统上发生变化。为什么需要这个?
  • 文件不存在、资源不足或内存不足等不太可能改变的常见错误怎么办?
  • 函数的实现总是可以改变,以便它们设置或不设置这些错误。错误代码只是一个指南,主要用于帮助您进行调试,并可能在错误消息框的“附加信息”部分显示给用户。您不应该在代码中对所有这些进行详尽的处理。任何预期且应处理的错误情况都将列在该特定功能的 MSDN 文档中。

标签: c winapi getlasterror


【解决方案1】:

没有这样的列表。事实上,不可能有一个,因为有 API 调用,它们甚至无法控制它们可以返回的整组错误代码(例如,EnumWindows,其中用户提供的代码设置错误代码)。

某些 API 调用提供了它们可以返回的部分错误代码列表。在这些情况下,它是文档合同的一部分,您可以编写代码来解释这些错误代码。请记住,这些列表通常永远不会完整,因此您的代码也需要准备好处理其他错误代码。

简而言之,需要根据具体情况实施错误处理。有一些常见的模式,但没有单一的包罗万象的实现。

【讨论】:

  • 我会尝试说服任何认为他们确实有一个完整列表来处理“其他”的人。在可能的错误代码的最终列表上依赖发布到发布是非常脆弱的。很难想象额外检查已经是故障状态的性能开销。
  • 这意味着只有官方错误处理会抛出对话框“我们很抱歉给您带来不便[插入格式化消息]请联系供应商”或“请检查日志文件”?那么日常程序如何使用成千上万个不同的 winapi 调用(如 chrome、word、excel、photoshop 等等)在不向用户抛出任何错误或最多 1-2 个错误的情况下工作?必须进行一些处理,例如 sleep(1000) 如果没有句柄等,你能告诉我 real world 是如何工作的吗?这超出了仅使用标准库编写的 50 个巧妙的线性示例的范围
  • 他们检查错误而不需要所有可能的错误代码列表。但这不是你问的。您要求提供每个功能的所有可能错误代码的列表。你想知道如何处理错误吗?
  • 每次通话后有15999个case切换?
  • 在我看来,您大大夸大了意外错误发生的速度。大多数时候,当您进行 API 调用时,它可能失败的唯一原因是您的程序或操作系统出现了严重错误;在这种情况下,错误代码是什么并不重要,因为无论如何您都无法实际做任何事情。您的程序应该记录错误代码,以防它有助于解决问题,仅此而已。
【解决方案2】:

没有这样的列表。即使特定函数的文档列出了可以返回的错误代码,该列表也不是详尽无遗的。您总是需要考虑返回其他代码的可能性。

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2011-03-01
    • 2014-01-11
    • 2013-07-28
    • 2012-12-20
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多