结合getlastror的价值和自定义错误消息
-
02-10-2019 - |
题
我有一个函数,可以返回每种情况下的不同dword值。因此,我有以下定义:
#define ERR_NO_DB_CONNECTION 0x90000
#define ERR_DB_NOT_OPEN 0x90001
#define ERR_DB_LOCKED 0x90002
#define ERR_DB_CONN_LOST 0x90003
现在,我在发生错误时返回这些值。我还需要在同一退货中返回getlastror的值。
不,我稍后再也看不懂。
我尝试结合不同的方式,例如:
return ERR_DB_NOT_OPEN + GetLastError();
然后通过减去ERR_DB_NOT_OPEN的值来提取错误,但是由于我需要在函数中使用它,在这些函数中可以有几个返回值,因此可以很复杂。
有什么方法可以实现这一目标吗?我的意思是,将值 + getlasterror结合在一起,然后提取它们?代码表示赞赏。
谢谢
杰西。
解决方案
根据 微软的文档, ,系统错误代码最大为15999(0x3e7f)。这意味着您有整个上词可以玩。您需要缩短错误代码以适合4个十六进制数字,然后您可以使用一些Windows宏将它们组合并拆分:
return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);
int lasterror = LOWORD(result);
int code = HIWORD(result);
其他提示
我知道这篇文章很旧,但以防万一...补充马克的答案。以下代码区域可供您定义自己的错误。
错误代码为32位值(位31是最重要的位)。位29保留用于应用程序定义的错误代码;没有系统错误代码具有此位设置。如果要为应用程序定义错误代码,请设置此位,以指示错误代码已由您的应用程序定义,并确保您的错误代码不会与任何系统定义的错误代码冲突。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v=vs.85%29.aspx
您可以将它们组合到字符串(char数组)中,然后将它们与呼叫者分开。
不隶属于 StackOverflow