注:本文屬於轉載,詳細出處忘記了,如果找到了會加上出處。
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 );