Da un blocco finale, è possibile dire che è stata sollevata un'eccezione?Come posso sapere se sono in uno stack di eccezioni Delphi?
risposta
si potrebbe verificare se ExceptObject o ExceptAddr vengono assegnati . Nel sorgente VCL questo è fatto per esame. in GIFImg.pas o jpeg.pas.
Il seguente codice dovrebbe uscita
ExceptObject <> nil
ExceptObject = nil
e se si rimuove l'eccezione poi, naturalmente,
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');
Ehi, piacere di vederti qui! –
Questa è una specie di trucco, ma è possibile provare a chiamare AcquireExceptionObject. Se ti trovi in uno stato di eccezione, otterrai un valore di ritorno, altrimenti otterrai zero.
(. Se avete ricevuto uno, assicuratevi di chiamare ReleaseExceptionObject dopo)
per quanto ne so questo può essere raggiunto solo con istruzioni try nidificate:
Try
Try
...
Except
...
End;
Finally
...
End
Stai chiedendo se sei un e nel blocco 'finally' * perché * è stata sollevata un'eccezione, o solo se esiste un'eccezione * da qualche parte * nel programma, come quando si inserisce un blocco' try-finally' da una sezione 'except'? –