Windows错误0“ERROR_SUCCESS”是什么意思?

时间:2011-09-23 04:12:40

标签: python windows windowserror

我编写了一个python程序,它通过管道重定向读取另一个进程的stdout。 但是,该计划很糟糕:

print "[Input Thread] ", self.inputPipe.readline(ii)

错误是IOError:[Errno 0]错误

我找到了windows errno 0的解释。它让人感到困惑,因为它定义为:

  

操作成功完成。

为什么操作成功完成会导致错误?

3 个答案:

答案 0 :(得分:1)

我知道这有点旧,但花了相当多的时间试图找到一个完整的答案而没有成功。所以我想我会分享我已经想到的东西。

如何发生这种情况的完整答案,就是你调用的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());
}

答案 1 :(得分:0)

这个名字可以欺骗你,但ERROR_SUCCESS实际上意味着没有错误 来自https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx

  

<强> ERROR_SUCCESS

     

0(0x0)
  操作成功完成。

答案 2 :(得分:0)

Windows API可能很棘手。您提到的第二个程序很可能没有正确检索错误号。它要么被覆盖,要么根本没有被拉入。因此它默认为0。

您没有说其他程序是什么;但是例如,在.net中,在声明您的外部调用时很容易忽略“ SetLastError”标志。

[DllImport('kernel32.dll', SetLastError = true)]

library's documentation