GetLastError

函數原型
DWORD GetLastError(VOID);
函數功能
該函數返回調用線程最近的錯誤代碼值,錯誤代碼以單線程爲基礎來維護的,多線程不重寫各自的錯誤代碼值。
返回值
返回值爲調用的線程的錯誤代碼值(unsigned long),函數通過調 SetLastError 函數來設置此值,每個函數資料的返回值部分都註釋了函數設置錯誤代碼的情況。
註解
GetLastError返回的值通過在api函數中調用SetLastError或SetLastErrorEx設置。函數並無必要設置上一次錯誤信息,所以即使一次GetLastError調用返回的是零值,也不能擔保函數已成功執行。只有在函數調用返回一個錯誤結果時,這個函數指出的錯誤結果纔是有效的。通常,只有在函數返回一個錯誤結果,而且已知函數會設置GetLastError變量的前提下,才應訪問GetLastError;這時能保證獲得有效的結果。SetLastError函數主要在對api函數進行模擬的dll函數中使用。
錯誤代碼獲取

  1. int n = GetLastError();
    通過獲取返回值,然後自己根據返回值,查找GetLastError對照表查看錯誤詳情。

  2. 通過FormatMessage()獲取錯誤詳情。

void getErrorInfomation(DWORD dw)
{
    LPVOID lpMsgBuf;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
        );

    // Process any inserts in lpMsgBuf.
    // ...

    // Display the string.
    MessageBox( NULL, (LPCTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION );

    // Free the buffer.
    LocalFree( lpMsgBuf );
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章