最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

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()的數值即可

沒有留言:

張貼留言