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?
cevap
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 =
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');
Hey, seni burada görmek güzel! –
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)
AFAIK bu sadece iç içe deneyin ifadelerle elde edilebilir:
Try
Try
...
Except
...
End;
Finally
...
End
İ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? –