Zitat:
Manche
WinApi-Routinen rufen SetLastError(ERROR_SUCCESS) nicht auf wenn sie erfolgreich waren.
Was im Prinzip ja richtig ist, da diese
API GetLast
Error und nicht GetLast
Status heißt.
Aber, wie in der Shoutbox bereits gesagt wurde,
sollte/muß man den gewünschten Fehlercode direkt nach der "fehlerhaften"
API abrufen und zwischenspeichern, wenn er nicht sofort verwendet wird, damit das Ergebnis nicht eventuell durch eine andere "fehlerhafte"
API zwischenzeitlich verändert werden könnte.
Delphi-Quellcode:
constructor EFileStreamError.Create(ResStringRec: PResStringRec; const FileName: string);
begin
inherited CreateResFmt(ResStringRec, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
end;
Hier könnte nicht nur ExpandFileName quer schießen, sondern auch der Constructor, da doch im
Begin der Speicher für die Instanz reserviert wird.