Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie bekommt man eine "Warnung" weg ? (https://www.delphipraxis.net/29319-wie-bekommt-man-eine-warnung-weg.html)

jfheins 7. Sep 2004 15:46


Wie bekommt man eine "Warnung" weg ?
 
Ich hätte da mal eine frage,
Ich bekomme bei meinem Quellcode immer ein
Zitat:

[Warnung] Unit1.pas(349): Variable 'Ini' ist möglicherweise nicht initialisiert worden
möchte das aber weghaben. Wie muss ich meinen Quellcode verändern ?
Muss ich das Ini.free an eine andere stelle schreiben ? Ich möchte ungern das Ini.create dort webnehmen, da dann möglicherweise ein laufzeitfehler entstehen könnte. Oder nicht ?

Zum Verständnis: Der Quellcode:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
 try
  fehler := sfehler;

  Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
  // Anweisungen
 except
  // Fehlermeldung
 end;
 Ini.Free; // <<< Hir kommt die Warnung
end;

Aenogym 7. Sep 2004 15:48

Re: Wie bekommt man eine "Warnung" weg ?
 
hi,

bei ini-files verwende lieber einen try...finally-block. in deinem fall kannst du den ja mit dem try...except-block verschachteln. denn das ini.free; sollte nach finally kommen ;)

Aenogym

mirage228 7. Sep 2004 15:48

Re: Wie bokommt man eine "Warnung" weg ?
 
Hi,

die Warnung kommt, weil es nicht sicher, dass "Ini" initialisert wurde. Das passiert, wenn es vor dem erstellen einen Fehler gibt und zum resourenschutzblockende gesprungen wird.

Du könntest es so lösen:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
  try
    try
      fehler := sfehler;
      // Anweisungen
    except
     // Fehlermeldung
    end;
  finally
    Ini.Free; // <<< Hir kommt die Warnung nicht mehr... ;)
  end;
end;
mfG
mirage228

SirThornberry 7. Sep 2004 15:49

Re: Wie bekommt man eine "Warnung" weg ?
 
Es heißt im nix anderes als das dein IniObject möglicherweise nicht initalisiert wird :lol: Bastel dein Try-block zu einem Try-Finally Block um denn derzeit kann es vorkommen das bei einem fehler der vor "Ini := TIniFile.Create" auftaucht trotzdem noch "Ini.Free" aufgerufen wird.

jfheins 7. Sep 2004 16:23

Re: Wie bekommt man eine "Warnung" weg ?
 
Lösung:
Einfach das TIniFile.Create (...); vor den try-Block schreiben.
Ich wollte das erst nicht, bis ich bemerkt habe, dass der Befehl die ini-Datei gar nicht erstellt.
Stimmt doch, oder ???

dango 9. Sep 2004 10:23

Re: Wie bekommt man eine "Warnung" weg ?
 
Du kannst das create auch innerhalb des try-Blocks lassen und Ini for dem try-Block erstmal mit nil initialisieren ! Ich war zwar auch ein wenig überrascht, aber genau dadurch hatte ich gerade gestern einige schwerwiegende Fehler in meinem Programm !

So wie Du es ursprünglich hattest, würde es zu einem Fehler kommen, wenn es beim create zu einer Exception kommt und free dann für das nicht initialisierte ini aufgerufen würde. Hast Du ini aber vorher mit nil belegt, geht alles glatt !

Ich würde es so machen:

Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  try
    Ini := nil;
    try
      fehler := sfehler;
      Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
    finally
      Ini.Free;
    end;
  except
  end;
end;
Gruß
Daniel

Phoenix 9. Sep 2004 10:29

Re: Wie bekommt man eine "Warnung" weg ?
 
Die einfachste Möglichkeit ist, ein
Code:
ini := nil;
in die erste Zeile zu schreiben. Ein .Free kann auch auf Nil aufgerufen werden (Klassenmethode, die nichts macht wenn die klassenreferenz nil ist) und die Warnung ist weg.

Phoenix 9. Sep 2004 10:32

Re: Wie bekommt man eine "Warnung" weg ?
 
Das wäre wohl so in etwas die Lösung:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  Ini := nil;
  try
    try
      fehler := sfehler;
      Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
    except
      // fehlerbehandlung
    end;
  finally
    Ini.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz