From within a finally block, is it possible to tell an exception has been raised?
+1
A:
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.)
Mason Wheeler
2009-09-12 21:41:44
+2
A:
AFAIK this can only be achieved with nested try statements :
Try
Try
...
Except
...
End;
Finally
...
End
sdu
2009-09-12 21:42:11
+14
A:
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');
Uwe Schuster
2009-09-12 22:42:47
Hey, nice to see you on here!
Mason Wheeler
2009-09-12 22:45:39