2011-09-23 5 views
0

파이프 리디렉션을 통해 다른 프로세스의 표준 출력을 읽는 Python 프로그램을 작성했습니다. 윈도우의 설명이 다음과 같이 정의하기 때문에 혼란하게 0. errno를 I 발견 [ERRNO 0] 에러Windows 오류 0 "ERROR_SUCCESS"의 의미는 무엇입니까?

:

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

오류 IO 오류이다 그러나, 프로그램이 광고 빨아

The operation completed successfully.

작업이 성공적으로 완료되어 오류가 발생하는 이유는 무엇입니까?

+0

보통, 그것은 일반적으로 성공을 나타냅니다. 외관상으로는 당신이 거기서 생각한 무슨이 문제가 있고 진짜로 것이 아니었던 때 "착오 알림말"를 인쇄했다는 것을 생각했다. –

+2

'ERROR_SUCCESS'는 WinAPI에서 "no error"를 의미합니다. 그것은 같은 인공적인 "정의 네임 스페이스"에 있기 위해 접두사 ERROR_가 붙습니다. IOError 비트에 더 많은주의를 기울여야 하겠지만, 무엇이 원인인지는 알 수 없습니다. –

답변

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()); 
} 
관련 문제