日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows Internals 笔记——错误处理

發布時間:2025/4/9 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 笔记——错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。