2009-09-12 12 views
8

Desde dentro de un bloque finally, ¿es posible decir que se ha producido una excepción?¿Cómo puedo saber si estoy en una pila de excepción de Delphi?

+0

¿Estás preguntando si eres tú? e en el bloque 'finally' * porque * se ha producido una excepción, o simplemente si hay una excepción * en algún lugar * en el programa, como cuando se ingresa un bloque' try-finally' dentro de una sección 'except'? –

Respuesta

18

se puede comprobar si se asignan ExceptObject o ExceptAddr . En la fuente de VCL esto se hace para el examen. en GIFImg.pas o jpeg.pas.

El siguiente código debe ser la salida

ExceptObject <> nil
ExceptObject = nil

y si se quita la excepción por supuesto

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'); 
+4

¡Hola, me alegro de verte aquí! –

3

Esto es una especie de hack, pero podrías intentar llamar a AcquireExceptionObject. Si se encuentra en un estado de excepción, obtendrá un valor de retorno; de lo contrario, obtendrá cero.

(. Si tuviste una, asegúrese de llamar ReleaseExceptionObject después)

2

yo sepa esto sólo se puede lograr con sentencias try anidadas:

Try 
    Try 
    ... 
    Except 
    ... 
    End; 
Finally 
    ... 
End 
Cuestiones relacionadas