Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ini laden -> Programm stürzt ab (https://www.delphipraxis.net/30998-ini-laden-programm-stuerzt-ab.html)

citybreaker 2. Okt 2004 11:47


Ini laden -> Programm stürzt ab
 
Hallo,
irgendwie stürtzt mein Programm bei dem Laden einer Ini Datei immer ab.
Ich hab folgenden Code.
Delphi-Quellcode:
type
 TFigur = class
 procedure LoadStats;
 private
  // Genral stats
  Name: String;
  Typ: String;
  Alter: String;
  Sex: String;
  Groesse: String;
  Gewicht: String;
  Level: String;
  // Feeling
  Hunger: String;
  Durst: String;
  Happy: String;
  Muedigkeit: String;
  Harndrang: String;
  Gesundheit: String;
  Disziplin: String;
 public
end;

var
  MainFrm: TMainFrm;
  Monster: TFigur;

...

procedure TFigur.LoadStats;
var Ini: TIniFile;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'stats.ini');

  with Monster do begin
    Name := Ini.ReadString('Settings', 'Name', '');
    Typ := Ini.ReadString('Settings', 'Typ', '');
    Alter := Ini.ReadString('Settings', 'Alter', '');
    Sex := Ini.ReadString('Settings', 'Sex', '');
    Groesse := Ini.ReadString('Settings', 'Groesse', '');
    Gewicht := Ini.ReadString('Settings', 'Gewicht', '');
    Level := Ini.ReadString('Settings', 'Level', '');

    Hunger := Ini.ReadString('Settings', 'Hunger', '');
    Durst := Ini.ReadString('Settings', 'Durst', '');
    Happy := Ini.ReadString('Settings', 'Happy', '');
    Muedigkeit := Ini.ReadString('Settings', 'Muedigkeit', '');
    Harndrang := Ini.ReadString('Settings', 'Harndrang', '');
    Gesundheit := Ini.ReadString('Settings', 'Gesundheit', '');
    Disziplin := Ini.ReadString('Settings', 'Disziplin', '');
  end;

  Ini.Free;
end;


procedure TMainFrm.Button1Click(Sender: TObject);
begin
  Monster.LoadStats;
end;
Und noch die Fehlermeldung. -.-'
Zitat:

Im Projekt projekt1.exe ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: 'Zugriffs verletzung bei Adresse 00404014 in Modul 'Projekt1.exe'. Schreiben
von Adresse 00000004'. Prozess wurde angehalten.

Aenogym 2. Okt 2004 11:52

Re: Ini laden -> Programm stürzt ab
 
hi,

EAccessViolation deutet meist auf ein nicht-initialisiertes objekt hin.
hast du schonmal per BreakPoints geschaut, wann der Fehler auftritt?

edit: hast du diene figur scxhon erstellt??
Delphi-Quellcode:
monster := TFigur.Create;
das muss vor dem ersten zugriff auf monster geschehen ;)

Aenogym

Manzoni 2. Okt 2004 11:54

Re: Ini laden -> Programm stürzt ab
 
Ich vermute mal, es liegt an der Eigenschaft 'Name'. Versuchs mal mit einem anderen Bezeichner, zum Beispiel 'Kennung'. Evtl. kanns auch daran liegen, dass monster noch nicht kreiert wurde.

Aenogym 2. Okt 2004 12:02

Re: Ini laden -> Programm stürzt ab
 
Zitat:

Zitat von Manzoni
Ich vermute mal, es liegt an der Eigenschaft 'Name'. Versuchs mal mit einem anderen Bezeichner, zum Beispiel 'Kennung'. Evtl. kanns auch daran liegen, dass monster noch nicht kreiert wurde.

das mit "Name" bringt den fehler nicht. das originale "name" ist auch nur ein string, so wie die obige deklaration. eine zuweisung sollte deshalb kein EAV bringen.

Aenogym

Luckie 2. Okt 2004 12:08

Re: Ini laden -> Programm stürzt ab
 
Aber name ist eine Objekteigenschaft der VCL.

citybreaker 2. Okt 2004 12:16

Re: Ini laden -> Programm stürzt ab
 
Zitat:

Zitat von Aenogym
hi,

EAccessViolation deutet meist auf ein nicht-initialisiertes objekt hin.
hast du schonmal per BreakPoints geschaut, wann der Fehler auftritt?

edit: hast du diene figur scxhon erstellt??
Delphi-Quellcode:
monster := TFigur.Create;
das muss vor dem ersten zugriff auf monster geschehen ;)

Aenogym

Danke, hier dran lag es. :-D

Muetze1 2. Okt 2004 12:27

Re: Ini laden -> Programm stürzt ab
 
Moin!

1. Name ist bei TObject noch nicht vorhanden als Eigenschaft.
2. With Figur Do - was soll der M*ll? Du greifst innerhalb einer Klasse auf eine feste Objektinstanz ausserhalb der Klasse zu? Mit anderen Worten: Egal wieviele Instanzen du erstellst, keine kann individuelle Eigenschaftswerte haben? Wozu dann überhaupt OOP? Das kannst doch dann gleich sein lassen...

Wenn du das nicht so haben willst wie du es getan hast, sondern ordentlich, dann einfach mal das With / Do komplett rausschmeissen und einfach nur den Inhalt des Konstrukts stehen lassen...

MfG
Muetze1

citybreaker 2. Okt 2004 12:53

Re: Ini laden -> Programm stürzt ab
 
Zitat:

Zitat von Muetze1
Moin!

1. Name ist bei TObject noch nicht vorhanden als Eigenschaft.
2. With Figur Do - was soll der M*ll? Du greifst innerhalb einer Klasse auf eine feste Objektinstanz ausserhalb der Klasse zu? Mit anderen Worten: Egal wieviele Instanzen du erstellst, keine kann individuelle Eigenschaftswerte haben? Wozu dann überhaupt OOP? Das kannst doch dann gleich sein lassen...

Wenn du das nicht so haben willst wie du es getan hast, sondern ordentlich, dann einfach mal das With / Do komplett rausschmeissen und einfach nur den Inhalt des Konstrukts stehen lassen...

MfG
Muetze1

Kenn mich mit Klassen nicht so aus. Ist heut das erste mal. :oops:

Luckie 2. Okt 2004 14:08

Re: Ini laden -> Programm stürzt ab
 
Dann kuck dir mal mein entsprechendes Tutorial dazu an: http://tutorials.luckie-online.de

supermuckl 2. Okt 2004 14:16

Re: Ini laden -> Programm stürzt ab
 
monster := Tfigur.create;

fehlt

und du solltest einfach with Monster do weglassen weil innerhalb einer procedure die du in einer klasse hast können die klassenvariablen ohne blabla.variablenname angesprochen werden (sind ja in der gleichen klasse -> logischerweise direkt ansprechbar )

Delphi-Quellcode:
type
TFigur = class
procedure LoadStats;
private
  // Genral stats
  Name_: String;
  Typ: String;
  Alter: String;
  Sex: String;
  Groesse: String;
  Gewicht: String;
  Level: String;
  // Feeling
  Hunger: String;
  Durst: String;
  Happy: String;
  Muedigkeit: String;
  Harndrang: String;
  Gesundheit: String;
  Disziplin: String;
public
end;

var
  MainFrm: TMainFrm;
  Monster: TFigur;

...

procedure TFigur.LoadStats;
var Ini: TIniFile;
begin
try
  Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'stats.ini');

 
    Name_ := Ini.ReadString('Settings', 'Name', '');
    Typ := Ini.ReadString('Settings', 'Typ', '');
    Alter := Ini.ReadString('Settings', 'Alter', '');
    Sex := Ini.ReadString('Settings', 'Sex', '');
    Groesse := Ini.ReadString('Settings', 'Groesse', '');
    Gewicht := Ini.ReadString('Settings', 'Gewicht', '');
    Level := Ini.ReadString('Settings', 'Level', '');

    Hunger := Ini.ReadString('Settings', 'Hunger', '');
    Durst := Ini.ReadString('Settings', 'Durst', '');
    Happy := Ini.ReadString('Settings', 'Happy', '');
    Muedigkeit := Ini.ReadString('Settings', 'Muedigkeit', '');
    Harndrang := Ini.ReadString('Settings', 'Harndrang', '');
    Gesundheit := Ini.ReadString('Settings', 'Gesundheit', '');
    Disziplin := Ini.ReadString('Settings', 'Disziplin', '');
finally
   Ini.Free;
end;

end;


procedure TMainFrm.Button1Click(Sender: TObject);
begin
  monster := Tfigur.create;
  Monster.LoadStats;
end;
und irgendwann auch mal wieder monster.free falls du mehrere hast und eins stirbt mal oderso ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.
Seite 1 von 2  1 2      

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