Eigentlich sieht der Code wirklich fast sauber aus.
Zitat von
Khabarakh:
Zitat von
mkinzler:
dennoch gehört das Create nicht ins try...Warum nicht ?
Weil's keinen Sinn ergibt?
Überleg doch mal, was passiert, sollte eine
Exception im ctor ausgelöst werden. Der Ini-Variablen wird kein Pointer zugewiesen, da der Code sofort ins Finally springt. Und da Delphi keinen lokalen Variablen initialisiert, knallt es höchstwahrscheinlich dann beim Aufruf von Free, weil IniDatei sonstwohin zeigen kann.
Also ändern wie folgt (im übrigen unveränderte Kopie):
Zitat von
Cyberbob:
Mein Code:
Delphi-Quellcode:
IniDatei := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini')); // verschoben
try
len := IniDatei.ReadInteger('Global', 'EQ', 0);
ShowMessage(IntToStr(len));
finally
IniDatei.Free;
end;
Was mach ich falsch, ich wüsste nicht, was ich anderst gemacht haben sollte als sonst...
Ich sehe auch keinen Fehler (und die anderen Autoren ebenfalls nicht wirklich) - natürlich unter der Voraussetzung, dass die Ini wirklich im Programmverzeichnis liegt.
In solchen Fällen bietet es sich immer an,
schrittweise im Debugger vorzugehen - Haltepunkt auf TIniFile.Create - und die
lokalen Variablen zu prüfen. Außerdem könntest Du
zusätzlich eine Stringliste erzeugen, in die Du nacheinander alle Sections und alle Werte einträgst und mit ShowMessage anzeigen lässt - siehe das Beispiel zu
TIniFile.ReadSections.
Gruß Jürgen