重置GetLastError值

时间:2011-07-02 17:40:15

标签: delphi

Delphi Xe。

在delphi中帮助:“...调用此函数通常会重置操作系统错误状态......”

如何在0上重置当前错误?即GetLastError = 0

示例:

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

3 个答案:

答案 0 :(得分:6)

您应该只在实际出现错误时调用GetLastError 。某些Windows API函数会在成功时将错误重置为0,有些则不会。无论哪种方式,只有在需要知道最新错误时才应询问错误状态。

请注意,还有SetLastError方法,但这对您没有帮助;如果将最后一个错误设置为0,那么当然GetLastError将返回0.

答案 1 :(得分:4)

它实际上是一个Win32调用(本身不是Delphi)。

您可以使用“SetLastError()”清除它。

以下是MSDN文档:

http://msdn.microsoft.com/en-us/library/ms679360%28v=vs.85%29.aspx

答案 2 :(得分:0)

这是低质量文档的一个示例。 GetLastError WinAPI函数将保留其返回值,直到下一次调用SetLastError为止,因此重复调用将无效。

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

另外,在Delphi文档中,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)