Windows函式錯誤處理 (轉)
當一個時,它首先要檢驗傳遞給它的各個引數的有效性,然後再設法任務.如果傳遞一個無效引數,或者由於某種原因無法執行這項操作,那麼操作就會返回一個值,指明該函式在某種程度上執行失敗了。
Windows函式常用的返回值型別:
void
BOOL:0,非0,TURE,FALSE
HANDLE:HANDLE,NULL,INVALID_HANDLE_VALID)
PVOID:NULL,PVOID
LONG/D:具體函式而定
...
編譯了一個所有可能的錯誤程式碼列表,並且為每個錯誤程式碼分配了一個32位的號碼. WinError.h頭(大約2萬多行)包含了Micorsoft定義的錯誤程式碼列表.
當一個Windows函式檢測到一個錯誤時,它會使用執行緒本地(thread-local storage)機制,將相應的錯誤程式碼號碼與呼叫的執行緒關聯起來.這將使執行緒能夠互相獨立的執行,而不會影響各自的錯誤程式碼.
當函式返回時,它的返回值就能指明是否有錯誤發生,若有且要確定是什麼錯誤,就需要呼叫DWORD GetLastError()函式,它返回執行緒的32位錯誤程式碼.有一個Error Lookup可用將錯誤程式碼的號碼換成相應文字描述.Windows還提供了一個函式FormatMessage可以將錯誤程式碼轉換成它的文字描述.
DWORD FormatMessage(
DWORD dwFlags, // and processing options
LPCVOID lpSource, // message source
DWORD dwMessageId, // message ntifier
DWORD dguageId, // language identifier
LPTSTR lpBuffer, // message buffer
DWORD nSize, // maximum size of message buffer
va_list *Arguments // array of message inserts
);
我們也可以在自己的函式中使用該機制,只需要使用VOID SetLastError(DWORD dwErrCode)函式即可,如果WinError.h中的任何程式碼都不能正確地反映該錯誤的性質,那麼可以建立你自己的程式碼。錯誤程式碼的域的劃分表:
位 31~30 29 28 27~16 15~0
內容 嚴重性 Microsoft/客戶 保留 裝置程式碼 異常程式碼
含義 0=成功 0=MS定義的程式碼 必順是0 由MS定義 由MS或客戶定義
1=參考
2=警告 1=客戶定義的程式碼
3=錯誤
注:如果建立自己的錯誤程式碼,必順使29位為1.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 六、函式、包和錯誤處理函式
- 兄弟連go教程(15)函式 - 錯誤處理Go函式
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式
- Go 錯誤處理新思路?用左側函式和表示式Go函式
- COM的錯誤處理 (轉)
- 使用PHP錯誤處理 (轉)PHP
- [轉] Scala Try 與錯誤處理
- Golang錯誤處理函式defer、panic、recover、errors.New介紹Golang函式Error
- 錯誤處理
- 錯誤處理的一點思考 (轉)
- Windows ORA-12560錯誤處理方法Windows
- PHP 錯誤處理PHP
- php錯誤處理PHP
- Go 錯誤處理Go
- Swift錯誤處理Swift
- Zabbix錯誤處理
- mysqldump錯誤處理MySql
- Go 函式多返回值錯誤處理與error 型別介紹Go函式Error型別
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- PHP錯誤處理和異常處理PHP
- go的錯誤處理Go
- Python錯誤處理Python
- 磁碟處理函式函式
- 字元處理函式字元函式
- windows732出現werfault.exe的錯誤處理Windows
- oracle函式大全-字串處理函式Oracle函式字串
- 異常錯誤資訊處理
- PHP 核心特性 - 錯誤處理PHP
- 常用模組 PHP 錯誤處理PHP
- laravel9 錯誤處理Laravel
- 淺談前端錯誤處理前端
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- 15-錯誤處理(Error)Error
- 學習Rust 錯誤處理Rust
- axios 的錯誤處理iOS
- Go語言之錯誤處理Go
- GOLANG錯誤處理最佳方案Golang