Im Except-Block machst Du irgendetwas und löst die
Exception erneut aus. Das Finally sorgt ja nur dafür, dass die Objekte auch im Ausnahmefall wieder freigegeben werden, abgefangen wird da nichts.
Ein Beispiel aus meiner IPv4-Klasse:
Delphi-Quellcode:
procedure TCustomIPv4.SetAsString(
const Value:
string);
procedure IPError;
begin
raise Exception.CreateFmt(INVALID_IP, [Value]);
end;
procedure StrToByte(
const s:
string;
var b: Byte);
var
dummy: integer;
begin
if not TryStrToInt(s, dummy)
or (dummy > MAXBYTE)
or (dummy < 0)
then
IPError
else
b := dummy;
end;
var
sl: TStringlist;
Rec: TIPAddressRec;
begin
sl := TStringlist.Create;
try
sl.Delimiter := '
.';
sl.DelimitedText := StringReplace(Value, #32, '
', [rfReplaceAll]);
if sl.Count = 4
then
try
StrToByte(sl[0], Rec.ByteHiHi);
StrToByte(sl[1], Rec.ByteHiLo);
StrToByte(sl[2], Rec.ByteLoHi);
StrToByte(sl[3], Rec.ByteLoLo);
except
raise;
end
else
IPError;
FIp := Rec.Mask;
finally
sl.Free;
end;
end;