Windows處理錯誤靠的是API的返回值,類型不止一種種:函數
- VOID,函數不可能失敗,Windows API的返回值不多是這個狀況。
- BOOL,若是函數失敗,則返回值是0,不然返回是非零值。不要測試返回值是否爲TRUE!
- HANDLE,若是函數失敗,則返回值一般是NULL,不然返回一個HANDLE用於操做對象。有的函數是返回INVALID_HANDLE_VALUE的,它被定義爲-1,以函數在文檔中的說明爲標準!
- PVOID,若是函數失敗,則返回NULL,不然返回內存塊的地址。
- LONG/DWORD,比較麻煩。某些狀況下,函數沒法對想要計數的對象計數,則返回值一般是0或者-1。爲了處理潛在的錯誤,必須認真閱讀SDK文檔中的說明。
當Windows函數檢測到一個錯誤的時候,會使用線程本地存儲的機制,關聯錯誤代碼和調用函數的線程。這樣就能夠保證線程不會影響各自的錯誤代碼。工具
而肯定這個錯誤的方法就是調用GetLastError函數,它只返回一個DWORD類型的錯誤代碼。測試
當你擁有這個錯誤代碼後,必須將號碼轉化成更有用的對象,這裏能夠根據頭文件WinError.h中定義的錯誤代碼列表來處理。spa
示例程序能夠參照VS的一個小工具Error Lookup。線程