最近我正在更新一些代碼,用於使用GetWindowDC - > CreateCompatibleDC - > CreateCompatibleBitmap - > SelectObject - > BitBlt - > GetDIBits系列WinAPI函數進行屏幕截圖。現在我檢查所有失敗的人,因爲他們可以並且有時會失敗。但是之後我必須通過刪除創建的位圖,刪除創建的dc以及釋放窗口dc來執行清理。在任何我見過的例子中 - 即使在MSDN上 - 相關函數(DeleteObject,DeleteDC < ReleaseDC)都不會檢查失敗,大概是因爲如果它們被檢索/創建OK,它們將始終被刪除/釋放OK。但是,他們仍然可以失敗。程序應該檢查WinAPI函數上「不應該」,但可以失敗的失敗嗎?
這只是一個值得注意的例子,因爲這些調用都緊挨着彼此。但偶爾還有其他的功能可以失敗,但實際上從來沒有做過。如GetCursorPos。或者只有在傳遞無效數據(例如FileTimeToSytemTime)時纔會失敗的函數。
那麼,檢查所有可能因故障失敗的功能是不是很好?或者有些確定不檢查?作爲一個推論,當檢查這些應該永不失敗的功能失敗時,什麼是合適的?拋出一個運行時異常,使用斷言,別的東西?
MSDN示例通常似乎試圖讓事情看起來很容易,而不是顯示可靠的錯誤處理:我不會將它們用作專業化的基準。 – 2011-04-04 06:47:14