【问题标题】:Combining the value of GetLastError and a custom error message结合 GetLastError 的值和自定义错误消息
【发布时间】:2011-02-14 09:25:15
【问题描述】:

我有一个函数,它会在出现错误的每种情况下返回不同的 DWORD 值。所以我有以下定义:

#define ERR_NO_DB_CONNECTION    0x90000
#define ERR_DB_NOT_OPEN         0x90001
#define ERR_DB_LOCKED           0x90002
#define ERR_DB_CONN_LOST        0x90003

现在,我在发生错误时返回这些值。 我还需要在同一个返回中返回 GetLastError 的值。

不,我以后无法阅读。

我尝试以不同的方式组合它,例如:

return ERR_DB_NOT_OPEN + GetLastError();

然后通过减去 ERR_DB_NOT_OPEN 的值来提取错误,但由于我需要在可能有多个返回值的函数中使用它,所以这样做会变得非常复杂。

有什么方法可以实现吗?我的意思是,结合 value + GetLastError 并稍后提取它们? 代码表示赞赏。

谢谢

杰斯。

【问题讨论】:

    标签: c windows getlasterror


    【解决方案1】:

    我知道这篇文章很旧,但以防万一......补充马克的回答。以下代码区域可供您定义自己的错误。

    错误代码是 32 位值(第 31 位是最高有效位)。 第 29 位保留用于应用程序定义的错误代码;没有系统 错误代码设置了该位。如果您要定义错误代码 您的应用程序,设置该位以指示错误代码已 由您的应用程序定义并确保您的错误代码 不与任何系统定义的错误代码冲突。

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx

    【讨论】:

      【解决方案2】:

      根据Microsoft's documentation,系统错误代码最大为 15999 (0x3E7F)。这意味着您可以使用整个大写单词。您需要缩短错误代码以适合 4 个十六进制数字,然后您可以使用一些 Windows 宏来组合和拆分它们:

      return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);
      
      int lasterror = LOWORD(result);
      int code = HIWORD(result);
      

      【讨论】:

      • 这并不完全正确。高位用于编码严重性、设施等。请参阅 winerror.h。
      • 这些只是当前存在的错误代码; Microsoft 保留将来添加新错误代码的权利。
      【解决方案3】:

      您可以将它们组合成一个字符串(一个字符数组),然后将它们从调用者那里拆分出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 2016-09-03
        • 1970-01-01
        • 2015-09-21
        • 2011-04-27
        • 2018-09-02
        • 2021-09-13
        相关资源
        最近更新 更多