還在不斷的切換到 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;
}