1 windows程序錯(cuò)誤的處理機(jī)制
windows API的返回類型
數(shù)據(jù)類型 |
表示失敗的值
|
V O I D |
該函數(shù)的運(yùn)行不可能失敗。Wi n d o w s 函數(shù)的返回值類型很少是V O I D
|
B O O L |
如果函數(shù)運(yùn)行失敗,那么返回值是0 ,否則返回的是非0 值。最好對(duì)返回值進(jìn)行測(cè)試,以確定它是0 還是非0 。不要測(cè)試返回值是否為T R U E
|
H A N D L E |
如果函數(shù)運(yùn)行失敗,則返回值通常是N U L L ,否則返回值為H A N D L E ,用于標(biāo)識(shí)你可以操作的一個(gè)對(duì)象。注意,有些函數(shù)會(huì)返回一個(gè)句柄值I N VALID_ HANDLE_VA L U E ,它被定義為- 1 。函數(shù)的Platform SDK 文檔將會(huì)清楚地說(shuō)明該函數(shù)運(yùn)行失敗時(shí)返回的是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 |
如果函數(shù)運(yùn)行失敗,則返回值是N U L L ,否則返回P V O I D ,以標(biāo)識(shí)數(shù)據(jù)塊的內(nèi)存地址
|
L O N G / D W O R D |
這是個(gè)難以處理的值。返回?cái)?shù)量的函數(shù)通常返回L O N G 或D W O R D 。如果由于某種原因,函數(shù)無(wú)法對(duì)想要進(jìn)行計(jì)數(shù)的對(duì)象進(jìn)行計(jì)數(shù),那么該函數(shù)通常返回0 或- 1 (根據(jù)函數(shù)而定)。如果調(diào)用的函數(shù)返回了L O N G / D W O R D ,那么請(qǐng)認(rèn)真閱讀Platform SDK文檔,以確保能正確檢查潛在的錯(cuò)誤
|
Wi n E r r o r. h 頭文件包含了M i c r o s o f t 公司定義的錯(cuò)誤代碼的列表,每個(gè)錯(cuò)誤都有三種表示,例如下面:
// MessageId: ERROR_PATH_NOT_FOUND
// MessageText:
// The system cannot find the path specified.
#define ERROR_PATH_NOT_FOUND 3L
當(dāng)有錯(cuò)誤發(fā)生時(shí),可以通過(guò)下面函數(shù)得到錯(cuò)誤的id,
DWORD GetLastError();
也可以通過(guò)下面函數(shù)由id得到對(duì)應(yīng)的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
);
當(dāng)調(diào)用一個(gè)API出現(xiàn)錯(cuò)誤時(shí),可以立即通過(guò)一下方法查看錯(cuò)誤,但是后面的API的調(diào)用會(huì)覆蓋調(diào)前面的錯(cuò)誤

圖1-1 在Visual Studio 6.0 的Wa t c h 窗口中鍵入“@ e r r, h r ”,就可以查看當(dāng)前線程的最后錯(cuò)誤代碼
Visual studio 還配有一個(gè)小的實(shí)用程序,稱為Error Lookup 。可以使用Error Lookup將錯(cuò)誤代碼的號(hào)碼轉(zhuǎn)換成相應(yīng)文本描述(見圖1 - 2 )。

用戶也可以定義自己的錯(cuò)誤代碼,但是要建立正確的32位的id哦,不能與系統(tǒng)的沖突啊.
表1-2 錯(cuò)誤代碼的域
位 |
3 1 ~30 |
29 |
28 |
27~16 |
15~0 |
內(nèi)容 |
嚴(yán)重性 |
M i c r o s o f t/客戶 |
保留 |
設(shè)備代碼 |
異常代碼 |
含義 |
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 =錯(cuò)誤 |
|
|