How can I tell if I'm in a Delphi exception stack?
You could check if ExceptObject or ExceptAddr are assigned. In the VCL source this is done for exam. in GIFImg.pas or jpeg.pas.
The following code should output
ExceptObject <> nil
ExceptObject = nil
and if you remove the exception then of course
ExceptObject = nil
ExceptObject = nil
try
try
raise Exception.Create('Just an exception');
finally
if ExceptObject <> nil then
WriteLn('ExceptObject <> nil')
else
WriteLn('ExceptObject = nil');
end;
except
end;
if ExceptObject <> nil then
WriteLn('ExceptObject <> nil')
else
WriteLn('ExceptObject = nil');
This is sort of a hack, but you could try calling AcquireExceptionObject. If you're in an exception state, you'll get a return value, otherwise you'll get nil.
(If you did get one, make sure to call ReleaseExceptionObject afterwards.)
AFAIK this can only be achieved with nested try statements :
Try
Try
...
Except
...
End;
Finally
...
End