Zitat von
shmia:
Delphi-Quellcode:
// 5. Sünde
// try...except wird verwendet, um eine Resource (Speicher, Handles,...) zu schützen
// Resourcen werden mit einem Resourceschlutzblock (try...finally) geschützt und nicht
// mit einem falsch verstandenem try...except
// in folgendem Beispiel wird try..except falsch verwendet
sl:=TStringList.create;
sl.add('[autorun]');
sl.add('OPEN='+app);
sl.add('ICON='+icon);
if copy(destfile, length(destfile)-4, 4)<>'.inf' then destfile:=destfile+'.inf';
try
sl.SaveToFile(destfile);
except
result:=false;
end;
sl.free;
Du hast da was falsch verstanden! Das Result:=false soll einer Funktion sagen, dass das Speichern nicht erfolgreich war und nicht die Ressource schützen!
Diese Verwendung sollte keinerlei Auswirkungen auf den Schutz haben, sondern vielmehr einen Funktionswert zurückgeben...
Wenn du dich schon beschweren willst, dann schreib wenigstens die ganze Funktion auf!
Delphi-Quellcode:
function TForm1.CreateAutorunFile(app, icon, destfile: String): boolean;
var
sl: TStringList;
begin
result:=true; //im Grunde erfolgreich
sl:=TStringList.create; //TStringlist erstellen
sl.add('[autorun]'); //Zeilen schreiben
sl.add('OPEN='+app); //-"-
sl.add('ICON='+icon); //-"-
if copy(destfile, length(destfile)-4, 4)<>'.inf' then destfile:=destfile+'.inf'; //im Zweifelsfall Endung anhängen
try
sl.SaveToFile(destfile); //Speicherversuch
except
result:=false; //Gescheitert? Dann false zurückgeben
end;
sl.free; //Ressource wieder freigeben
end;
Natürlich hätte man das Ganze durch try...finally schützen können, aber das hielt ich in dem Fall nicht für nötig! Und im Fall einer Wertezuweisung in einer Funktion ist das hier ebenso falsch, weil eine Sicherung NIE GEPLANT war...
Delphi-Quellcode:
sl:=TStringList.create; // Resource belegen
try // direkt danach folgt das try
sl.add('[autorun]');
sl.add('OPEN='+app);
sl.add('ICON='+icon);
if copy(destfile, length(destfile)-4, 4)<>'.inf' then destfile:=destfile+'.inf';
sl.SaveToFile(destfile);
finally
sl.Free; // die Resource wird immer freigegeben, egal was passiert
end;
EDIT: Wir werden uns das mal merken und machen uns dann über dich lustig... Natürlich auch, wenn du mal vollkommen recht haben solltest! Aber diesmal: