Windows編程中的錯誤處理

Windows編程中獲得錯誤信息

在windows編程中我們的函數往往不如我們想象的那樣工作,他經常會出現很多這樣那樣的問題,一般情況下,我們可以通過他們的返回值來得到他們到底是否發了小脾氣:

Windows常見的返回值類 型:
1) VOID:表明該函數運行不可能失敗,Windows函 數的返回值很少是VOID。
2) BOOL:如果函數運行失敗,返回值是0,否則 返回值是非0值。最好對返回值進行測試,以確定它是0還 是非0,而不是測試返回值是否是TRUE。
3) HANDLE:如果函數運行失敗,則返回值通常是NULL, 否則返回值是某個HANDLE,用於標識你可以操作的一個對象。請注意這些值,有些函數失敗時會返回一個句柄值INVALID_HANDLE_VALUE, 它被定義爲-1。函數的Platform SDK文 檔將會清楚地說明函數運行失敗時返回值是NULL還是INVALID_HANDLE_VALUE。
4) PVOID:如果函數運行失敗,返回值是NULL, 否則返回PVOID,以標識數據塊的內存地址。
5) LONG/DWORD:這是個難以處理的值。返回數量的函數通常返回LONG或DWORD,如果由於某種原因,函數無法對想要進行計數的對象進行計數,那麼該函數通常返回0或-1(根據函數而定)。如果調用的函數返回值爲LONG或DWORD,那麼得閱讀Platform SDK以確保能正確檢測潛在的錯誤。

由此可見,得到錯誤信息對我們修改程序幫助很大,如何獲取這些錯誤信息呢。其實非常簡單,windows爲我們提供了3個API函數,我們可以使用他們來獲取錯誤信息。

DWORD WINAPI GetLastError(void);,他的作用是獲取由系統API產生的錯誤代碼,代碼的詳細信息可參考MSDN或是微軟公佈的錯誤代碼獲取API的錯誤信息,
   當然,我們也可以直接讓他顯示出錯誤信息,如何操作呢,這就用到下面的函數

 具體信息可參看
MSDN
.

上對他的說明這裏我們使用一個簡單的例子來說明他們的用法 :

 

這裏是動態加載DLL,如果成功,後面代碼將正確執行,如果錯誤,將返回錯誤信息的詳細說明。其中,後面一部分代碼可以直接使用,把他加入你的代碼調用API可能出錯的地方,他將給你提示出你的函數錯誤的描述信息。

假設我們想要在自己代碼中自定義錯誤信息,這是允許的,你可以使用

 

 

DWORD dwErrCode 就是你想要設置的錯誤代碼,不過要注意的是,你的錯誤代碼不能和系統衝突,下面是系統已經定義的錯誤代碼字段信息:

31~30

29

28

27~16

15~0

內容

嚴重性

Microsoft/客戶

保留

Facility代碼

異常代碼

含義

0=成功

1=供參考

2=警告

3=錯誤

0=Microsoft定義的代碼

1=客戶定義的代碼

必須是0

前256個值由Microsoft保留

Microsoft/客戶定義的代碼

對於這兩個函數的具體使用和這些字段的用法,請看下集故事:windows編程中的異常處理和windows結構化異常處理方式解析。

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章