![]() |
EAccesViolation beim Zugriff auf ini
Hey,
ich lade aus einer ini mit folgendem code einige Einstellungen:
Delphi-Quellcode:
Dabei bekomme ich die Fehlermeldung "EAccesViolation". Ich weiß, dass das bedeutet, dass ich auf Speicher zugreife, der nicht existiert oder so ähnlich, aber in anderen Prozeduren greife ich genau so auf die gleiche Datei zu. In den anderen Prozeduren benutze ich allerdings keine Schleife. Kann das damit was zu tun haben?
procedure load;
Var ini:TIniFile; fname:string; i,count:integer; begin fname:=Unit1.sDir+'main.ini'; form1.listbox1.clear; ini:=TIniFile.create(fname); try count:=ini.readinteger('main','forms',0); if count >0 then do for i:=1 to count do form1.listbox1.items.add(ini.readstring('main','form'+inttostr(i),'')); finally ini.free; end; end; Hoffe, ihr könnt mir helfen |
Re: EAccesViolation beim Zugriff auf ini
Hallo,
nachdem du die Listbox clearst, ist der Speicher freigegeben und du kannst nicht mehr drauf zugreifen. Ersetze den Befehl form1.listbox1.clear; durch form1.listbox1.items.text := ''; Dann sollte es gehen. |
Re: EAccesViolation beim Zugriff auf ini
Erstmal Danke für die Hilfe, aber mit
Delphi-Quellcode:
funktioniert es auch nicht. Selbst wenn ich die ganze Zeile rausnehme, kommt der Fehler
form1.listbox1.items.text:='';
|
Re: EAccesViolation beim Zugriff auf ini
Zitat:
Zitat:
@Robby: in welcher Zeile erscheint die Meldung und welchen Wert hat i zu diesem Zeitpunkt? |
Re: EAccesViolation beim Zugriff auf ini
Ich tipp mal drauf das form1 undefiniert ist.
Bau deine Funktion um so das du mit TStrings arbeitest und nicht auf irgendwelche globale Formularvariablen die evtl. in einem anderen Projekt standardmäßig erzeugt wurden. |
Re: EAccesViolation beim Zugriff auf ini
Außer einem do zuviel:
Delphi-Quellcode:
fällt mir jetzt erstmal nichts auf. In welcher Zeile kommt denn der Fehler?
if count >0 then do
|
Re: EAccesViolation beim Zugriff auf ini
Das ist grade das Problem, es wird weder eine Zeile markiert noch irgendein anderer Hinweis darauf gegeben, wo der Fehler auftritt. Ich nehme jetzt mal die anderen Sachen nach und nach da raus, vielleicht finde ich dann die Stelle
|
Re: EAccesViolation beim Zugriff auf ini
Sorry, mal wieder ein dummer Fehler :wall: :wall: :wall: Die Variable sDir war zu dem Zeitpunkt noch nicht gesetzt... :oops:
|
Re: EAccesViolation beim Zugriff auf ini
Zitat:
|
Re: EAccesViolation beim Zugriff auf ini
Falls es dich interessiert, das ist meine einzige Globale Variable :wink:
|
Re: EAccesViolation beim Zugriff auf ini
Zitat:
|
Re: EAccesViolation beim Zugriff auf ini
Okay, dann eben zwei... Dass man nicht mit massig globalen Variablen arbeiten sollte, weiß ich außerdem aus eigener Erfahrung nur allzu gut
|
Re: EAccesViolation beim Zugriff auf ini
Wenn man schon in Delphi programmiert, sollte man sich doch auch langsam von alten Pascal-Angewohnheiten verabschieden.
Statt ...
Delphi-Quellcode:
... kannst du die Funktion "Load" auch als Methode deiner "Form1" machen und hättest damit schonmal einen Schritt in Richtung OOP getan.
procedure load;
Var ini:TIniFile; fname:string; i,count:integer; begin fname:=Unit1.sDir+'main.ini'; form1.listbox1.clear; ini:=TIniFile.create(fname); try count:=ini.readinteger('main','forms',0); if count >0 then do for i:=1 to count do form1.listbox1.items.add(ini.readstring('main','form'+inttostr(i),'')); finally ini.free; end; end;
Delphi-Quellcode:
unit Unit1;
interface uses ...; type TForm1 = class(TForm) // ... private procedure Load; // ... public // ... end; var // ... implementation {$R *.dfm} procedure TForm1.Load; var ini: TIniFile; FName: String; i, Count: Integer; begin FName := Unit1.sDir + 'main.ini'; // << globale Variable *schauder* Mach dir 'ne "Config"-Klasse Listbox1.Clear; ini := TIniFile.Create(FName); try Count := ini.ReadInteger('main', 'forms', 0); if Count > 0 then for i := 1 to Count do Listbox1.Items.Add(ini.ReadString('main', 'form' + inttostr(i), '')); finally FreeAndNil (ini); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz