注:本文屬於轉載,詳細出處忘記了,若是找到了會加上出處。
VC中GetLastError()獲取錯誤信息的使用在VC中編寫應用程序時,常常須要涉及到錯誤處理問題。許多函數調用只用TRUE和FALSE來代表函數的運行結果。一旦出現錯誤,MSDN中每每會指出請用GetLastError()函數來得到錯誤緣由。
可問題是,GetLastError()返回的只是一個雙字節數值(DWORD)。OH,MY GOD!目前Win32的出錯編號已經從0排到11031,而這還不是錯誤編碼的所有。由於錯誤代碼還在不斷增長。
我想沒有人願意本身去查出錯編碼所對應的錯誤信息。好在Windows(Windows95以上, Window NT 3.1以上)已經提供了現成的錯誤信息處理函數:FormatMessage()。 如下是用FormatMessage()獲得由GetLastError()返回的出錯編碼所對應錯誤信息的示例:
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
MessageBox(NULL,(LPCTSTR)lpMsgBuf, _T("Error"), MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );