2013年4月15日 星期一

取得GetLastError()錯誤訊息的文字敘述

寫微軟程式常會遇到,當發生程式或系統錯誤時會有需要將錯誤訊息輸出,因此藉由::GetLastError()將錯誤代碼回傳來偵錯。
可是有錯誤代碼還不夠,若需要知道真正錯誤原因,就得要去微軟官網去找出GetLastError回傳錯誤碼對應的文字敘述。
如果沒有網路的話要找出錯誤碼所表示的錯誤原因就很麻煩,這裡提供直接用Windows API來直接取得錯誤訊息的文字敘述,以協助我們進行程式偵錯。

void GetErrorMessage(DWORD dwErrorMessageCode)
{
 CString strMsg;
 LPVOID lpMsgBuf;

 FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
     NULL,
     dwErrorMessageCode,
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 預設語言
     (LPTSTR) &lpMsgBuf,
     0,
     NULL);

 strMsg.Format(_T("Error Message : %s\nError Code : 0x%X\n"), lpMsgBuf, dwErrorMessageCode);
 printf(strMsg);
 LocalFree(lpMsgBuf); // 記得free掉空間,養成好習慣
}

DWORD dwErrorMessageCode傳入GetLastError()的數值即可

沒有留言:

張貼留言