2010年9月28日 星期二

如何獲得 GetLastError() 的文字訊息

在撰寫軟體時常常會接獲錯誤訊息,或在操作某些動作時發現錯誤,
也經常利用 ::GetLastError(); 這支 Windows API 來獲取錯誤代碼,
但是這支API回報的是 DWORD 型態,想知道得更詳細往往要再上網搜尋一番,
當然也有方法可以取得文字訊息,簡單的範例如下。


int main()
{
  CString strMsg;

  LPVOID lpMsgBuf;

  FormatMessage(
  FORMAT_MESSAGE_ALLOCATE_BUFFER |
  FORMAT_MESSAGE_FROM_SYSTEM |
  FORMAT_MESSAGE_IGNORE_INSERTS,
  NULL,
  GetLastError(), // 這裡也可以改成你想看的代碼值,例如直接打 8L 可得 "空間不足"
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  (LPTSTR) &lpMsgBuf,
  0,
  NULL);

  strMsg.Format(_T("錯誤訊息:%s\n錯誤代碼:0x%x"), lpMsgBuf, GetLastError());

  LocalFree(lpMsgBuf); // 記得 free 掉空間

  return TRUE;
}


例如 GetLastError 得到的是 13846L
利用 MessageBox 把 strMsg 秀出來的值就會是

---------------------------
Error Msg
---------------------------
錯誤訊息:收到無效的 cookie。

錯誤代碼:0x3616
---------------------------
確定
---------------------------

沒有留言:

張貼留言