我知道這是有點古老,但花了相當多的時間試圖找到一個完整的答案沒有成功。所以我想我會分享我的想法。
發生這種情況的完整答案是當您調用「失敗」的pInvoke方法但不是因爲錯誤。
搞起你認爲
例如假設你需要解開一個窗鉤,但這樣做的因位的意大利麪條或在你的對象架構防禦式編程的偏執水平打了兩次電話。
// hook assigned earlier
// now we call our clean up code
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0)
{
// method succeeds normally so we do not get here
Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error());
}
// other code runs, but the hook is never reattached,
// due to paranoid defensive program you call your clean up code twice
if (NativeMethods.UnhookWindowsHookEx(HookHandle) == 0)
{
// pInvoke method failed (return zero) because there was no hook to remove
// however there was no error, the hook was already gone thus ERROR_SUCCESS (0)
// is our last error
Log.ReportWin32Error("Error removing hook", Marshal.GetLastWin32Error());
}
通常,當你的錯誤代碼'0',通常表示成功(如沒有問題)。顯然,無論你在那裏做了什麼,都認爲出現了問題,並在沒有一個問題時打印出「錯誤信息」。 –
'ERROR_SUCCESS'表示WinAPI中的「無錯誤」。它的前綴是ERROR_,它與「定義命名空間」相同。我會更加關注IOError位,儘管我不知道是什麼原因造成的。 – 2011-09-23 04:49:19