1

我有一个函数,它为每种出现错误的情况返回不同的 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 并稍后提取它们?代码表示赞赏。

谢谢

杰斯。

4

3 回答 3

2

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

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

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

于 2015-05-22T01:21:57.583 回答
1

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

return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);

int lasterror = LOWORD(result);
int code = HIWORD(result);
于 2010-04-30T20:04:53.210 回答
0

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

于 2010-04-30T20:03:25.497 回答