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