2011-07-02 9 views
3

Delphi Xe. 델파이 도움말GetLastError 값을 재설정하십시오.

는 :

방법 0에서 현재의 에러를 재설정 "... 호출이 기능은 일반적으로 운영 체제 오류 상태를 ... 재설정"? 나는. GetLastError = 0

예 그 : 그것은 실제로는 Win32 호출입니다

Try 
// There is an error 
except 
showmessage(inttostr(getlasterror)); // Ok, getlasterror<>0 
end; 
.... 
// no errors 
.... 
// How to reset a current error on 0? 
showmessage(inttostr(getlasterror)); // Again will be <> 0 

답변

6

:

다음은 MSDN 문서입니다. 일부 Windows API 함수는 성공하면 오류를 0으로 재설정하고 일부는 초기화하지 않습니다. 어느 쪽이든 가장 최근의 오류를 알아야 할 때만 오류 상태를 조사해야합니다.

SetLastError 방법도 있지만 여기서는 도움이되지 않습니다. 마지막 오류를 0으로 설정하면 물론 GetLastError은 0을 반환합니다.

+0

- GetLastError를 호출 할 때 실질적인 제한은 없습니다. GetLastError는 결정 론적 함수입니다. –

+0

@Downvoter 아마도 나는 명확하지 않았지만 GetLastError로 진행되는 마법이 있다고 말하지는 않았습니다. 내가 말한 것은 a) 일부 기능은 성공시 오류를 다시 설정하는 기능이었고 일부 기능은 성공하지 못했지만 (100 % 사실이며 사실 * 당신이 바로 그 점을 확인한 것입니다) b) 묻고 싶은 좋은 이유가 없습니다. 함수가 오류를보고하지 않는 한 마지막 오류. 이 방법의 요점은 "오류가 발생 했습니까?"입니다. "마지막 API 호출이 오류를 반환 한 이유는 무엇입니까?" OP 질문을 감안할 때, 나는 그것들이 타당하고 관련이 있다고 생각합니다. – dlev

+0

@Downvoter, 요점은 * 오류가 있다는 말을 듣지 않았다면 GetLastError를 호출해서는 안됩니다. * 오류가 있는지 여부를 감지하는 데 사용하지 마십시오. 즉, 구의 의도 된 유스 케이스에는 결함이 있습니다. 실제로 오류가없는 경우에도 GetLastError가 0을 반환한다는 보장은 없습니다. –

0

이것은 낮은 품질의 문서의 예입니다. GetLastError WinAPI 함수는 SetLastError의 다음 호출까지 반환 값을 유지하므로 반복적으로 호출해도 아무런 효과가 없습니다.

SetLastError(42); 
for I := 1 to 100 do 
    Assert(GetLastError() = 42); // all of those assertions evaluates to True 

또한 델파이 문서 GetLastError가 예외 처리 루틴으로 잘못 배치되었습니다. 이 오류 처리 메커니즘은 서로 관련이 없습니다.

참조에서 바보 같은 "보통"단어 : GetLastError 반환 값을 출력하는 데 사용되는 함수가 SetLastError를 호출하기 때문에 발생합니다. 예 :

SetLastError(42); 
    OutputDebugString(PChar(Format('GetLastError() = %d', [GetLastError()]))); // 42 
    OutputDebugString(PChar(Format('GetLastError() = %d', [GetLastError()]))); // 0! (ERROR_SUCCESS set by the previous OutputDebugString call) 
관련 문제