나는 이것이 일종의 것으로 알고 있지만 성공하지 못한 채 완전한 답을 찾기 위해 상당한 시간을 보냈다. 그래서 나는 내가 알아 낸 것을 나눌 것이라고 생각했습니다.
어떻게 이런 일이 발생했는지에 대한 완전한 대답은 오류로 인해 호출하지 않은 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());
}
보통, 그것은 일반적으로 성공을 나타냅니다. 외관상으로는 당신이 거기서 생각한 무슨이 문제가 있고 진짜로 것이 아니었던 때 "착오 알림말"를 인쇄했다는 것을 생각했다. –
'ERROR_SUCCESS'는 WinAPI에서 "no error"를 의미합니다. 그것은 같은 인공적인 "정의 네임 스페이스"에 있기 위해 접두사 ERROR_가 붙습니다. IOError 비트에 더 많은주의를 기울여야 하겠지만, 무엇이 원인인지는 알 수 없습니다. –