Windows Internals 笔记——错误处理
生活随笔
收集整理的這篇文章主要介紹了
Windows Internals 笔记——错误处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.Windows函數檢測到錯誤時,會使用一種名為“線程本地存儲區”的機制將相應的錯誤代碼與“主調線程”關聯到一起。這種機制使得不同的線程能獨立運行,不會出現相互干擾對方的錯誤代碼的情況。
?
2.GetLastError返回32位的錯誤代碼表,每個錯誤有三種表示:一個消息ID、消息文本、和一個編號。函數失敗后應立即調用GetLastError,否則很可能被改寫。
// // MessageId: ERROR_SUCCESS // // MessageText: // // The operation completed successfully. // #define ERROR_SUCCESS 0L#define NO_ERROR 0L // dderror #define SEC_E_OK ((HRESULT)0x00000000L)// // MessageId: ERROR_INVALID_FUNCTION // // MessageText: // // Incorrect function. // #define ERROR_INVALID_FUNCTION 1L // dderror// // MessageId: ERROR_FILE_NOT_FOUND // // MessageText: // // The system cannot find the file specified. // #define ERROR_FILE_NOT_FOUND 2L
?
3.可以用FormatMessage函數來格式化輸出錯誤信息。
void OutputLastError(LPTSTR lpszFunctionName) {LPVOID lpMsgBuf;LPVOID lpDisplayBuf;DWORD dwErrorCode = GetLastError();FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,dwErrorCode,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0, NULL);lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunctionName) + 40) * sizeof(TCHAR));StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / sizeof(TCHAR), TEXT("%s failed with error %d : %s"), lpszFunctionName, dwErrorCode, lpMsgBuf);_tprintf((LPCTSTR)lpDisplayBuf);LocalFree(lpMsgBuf);LocalFree(lpDisplayBuf); }?
4.我們可以使用 void SetLastError(DWORD dwErrCode); 來設置錯誤代碼,也可以創建自己的代碼,32位字段的組成如下:
需要注意的是第29位。
?
轉載于:https://www.cnblogs.com/zoneofmine/p/8087453.html
總結
以上是生活随笔為你收集整理的Windows Internals 笔记——错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用:after伪类写背景
- 下一篇: mysql的配置和启动命令