还在不断的切换到 ERROR LOOKUP 程序查看 API 返回的系统错误代码吗? 那简直太低效啦!
不如让系统以当前默认编码为你生成错误信息字符串吧:
/
//
// IN
// DWORD dwError 错误号,默认值(0xFFFFFFFF)表示直接获取本线程的最后错误号
//
// OUT
// CString 系统生成的错误信息串
//
static CString GetErrorMsg(DWORD dwError = 0xFFFFFFFF)
{
dwError = (dwError == 0xFFFFFFFF) ? GetLastError() : dwError;
// format message
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, // module to get message from (NULL == system)
dwError,
0, // Default language : MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// get the string.
CString strMsg((LPCTSTR)lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
strMsg.TrimRight(_T("/r/n"));
return strMsg;
}
/
//
// IN
// DWORD dwError 错误号,默认值(0xFFFFFFFF)表示直接获取本线程的最后错误号
//
// OUT
// CString 系统生成的错误信息串以及错误号的十进制值
//
static CString GetErrorMsgAndCode(DWORD dwError = 0xFFFFFFFF)
{
dwError = (dwError == 0xFFFFFFFF) ? GetLastError() : dwError;
CString strMsg;
strMsg.Format(_T("%s (%d)"), GetErrorMsg(dwError), dwError);
return strMsg;
}