windows核心編程–函數返回錯誤

來源:互聯網
上載者:User
 1 windows程式錯誤的處理機制

    windows API的傳回型別
資料類型

表示失敗的值

V O I D

該函數的運行不可能失敗。Wi n d o w s 函數的傳回值類型很少是V O I D

B O O L

如果函數運行失敗,那麼傳回值是0 ,否則返回的是非0 值。最好對傳回值進行測試,以確定它是0 還是非0 。不要測試傳回值是否為T R U E

H A N D L E

如果函數運行失敗,則傳回值通常是N U L L ,否則傳回值為H A N D L E ,用於標識你可以操作的一個對象。注意,有些函數會返回一個控制代碼值I N VALID_ HANDLE_VA L U E ,它被定義為- 1 。函數的Platform SDK 文檔將會清楚地說明該函數運行失敗時返回的是N U L L 還是I N VA L I D _ H A N D L E _ VA L I D

P V O I D

如果函數運行失敗,則傳回值是N U L L ,否則返回P V O I D ,以標識資料區塊的記憶體位址

L O N G / D W O R D

這是個難以處理的值。返回數量的函數通常返回L O N G 或D W O R D 。如果由於某種原因,函數無法對想要進行計數的對象進行計數,那麼該函數通常返回0 或- 1 (根據函數而定)。如果調用的函數返回了L O N G / D W O R D ,那麼請認真閱讀Platform SDK文檔,以確保能正確檢查潛在的錯誤

Wi n E r r o r. h 標頭檔包含了M i c r o s o f t 公司定義的錯誤碼的列表,每個錯誤都有三種表示,例如下面:

// MessageId: ERROR_PATH_NOT_FOUND
// MessageText:
//  The system cannot find the path specified.
#define ERROR_PATH_NOT_FOUND             3L

當有錯誤發生時,可以通過下面函數得到錯誤的id,
DWORD GetLastError();
也可以通過下面函數由id得到對應的text:
DWORD FormatMessage(
  DWORD dwFlags,      // source and processing options
  LPCVOID lpSource,   // pointer to  message source
  DWORD dwMessageId,  // requested message identifier
  DWORD dwLanguageId, // language identifier for requested message
  LPTSTR lpBuffer,    // pointer to message buffer
  DWORD nSize,        // maximum size of message buffer
  va_list *Arguments  // pointer to array of message inserts
);
當調用一個API出現錯誤時,可以立即通過一下方法查看錯誤,但是後面的API的調用會覆蓋調前面的錯誤

圖1-1 在Visual Studio 6.0 的Wa t c h 視窗中鍵入“@ e r r, h r ”,就可以查看當前線程的最後錯誤碼

Visual studio 還配有一個小的公用程式,稱為Error Lookup 。可以使用Error Lookup將錯誤碼的號碼轉換成相應文本描述(見圖1 - 2 )。

使用者也可以定義自己的錯誤碼,但是要建立正確的32位的id哦,不能與系統的衝突啊.

表1-2 錯誤碼的域

3 1 ~30 29 28 27~16 15~0
內容 嚴重性 M i c r o s o f t/客戶 保留 裝置代碼 異常代碼
含義 0 =成功 0 =M i c r o s o f t公司定義的代碼 必須是0 由M i c r o s o f t公司定義 由Microsoft/客戶定義
  1 =供參考 1 =客戶定義的代碼      
  2 =警告        
  3 =錯誤    

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.