Zitat:
Ergänzung: nicht nur! Innerhalb des Except / End Blockes ist die globale Variable ExceptObject gültig und diese enthält die aktuelle
Exception.
Das ist gefährlich diese Annahme zu unterstellen.
Wir wissen: ExceptObject ist eine globale Variable. Ist sie auch eine Threadeigene globale Variable -> threadvar ?
Wenn nicht kann innerhalb deiner verschachtelten IF Abfragen das ExceptObject als globale Variable durch eine
Exception innerhalb eines parallelen Threads verändert werden.
Man sollte also wirklich
Delphi-Quellcode:
try
except
on E:
Exception do
if E
is EAbort
then ...
else
if E
is EInOutError
then ...
else reraise;
end;
benutzen. In diesem Moment verhält sich das on E:
Exception do wie ein with Variable do Anweisung. Der Compiler wird dann in der lokalen Variable E das aktuelle
Exception Object zur Verfügung halten, statt bei jeder IF Abfrage auf ein globales Object zuzugreifen. Davon abgesehen ist das SEH unter Windows Stackbasiert und mit der Abfrage on E:
Exception do greifen wir nur auf diesen Stack und damit Threadbezogen auf das einzigste gültige
Exception Object zu. Die globale Variable ExceptObject ist also eher eine Krücke damit bestimmte Objekte wie TApplication ein eigene Handling von
Exception machen können.
Gruß Hagen