2009-09-12 21 views
8

Son olarak bir blok içinde, bir istisnanın yükseltildiğini söylemek mümkün mü?Delphi özel durum yığınında olduğumu nasıl anlarım?

+0

İsterseniz ister misiniz? 'nihayet' bloğunda * çünkü * bir istisna kaldırıldı, ya da programda bir istisna * olup olmadığı, örneğin bir 'except' bölümü içinden bir "try-finally" bloğu girdiğinizde olduğu gibi? –

cevap

18

Sen kontrol edebilir ExceptObject veya ExceptAddr atanmışsa . VCL kaynağında, bu sınav için yapılır. GIFImg.pas veya jpeg.pas içinde.

Aşağıdaki kod gerektiği çıkış

ExceptObject <> nil
ExceptObject =

nil ve daha sonra istisna kaldırırsanız tabii

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

Hey, seni burada görmek güzel! –

3

Bu bir kesmek gibidir, ancak AcquireExceptionObject öğesini çağırmayı deneyebilirsiniz. Bir istisna durumundaysanız, bir dönüş değeri alırsınız, aksi halde sıfırlanırsınız.

(. Eğer bir tane olsaydı, sonradan ReleaseExceptionObject aramak emin olun)

2

AFAIK bu sadece iç içe deneyin ifadelerle elde edilebilir:

Try 
    Try 
    ... 
    Except 
    ... 
    End; 
Finally 
    ... 
End