组合GetLastError的值和自定义错误消息

我有一个函数返回一个不同的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的值来提取错误,但是因为我需要在可能有多个返回值的函数中使用它,所以可以非常复杂。

有没有办法做到这一点? 我的意思是,结合值+ GetLastError并提取它们以后? 代码表示赞赏。

谢谢

杰西。

根据微软的文档 ,系统错误代码最大为15999(0x3E7F)。 这意味着你有整个上面的单词来玩。 您需要缩短错误代码以适合四位十六进制数字,然后您可以使用一些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