Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlermeldung bei Programmstart (https://www.delphipraxis.net/6042-fehlermeldung-bei-programmstart.html)

Tim.exe 27. Jun 2003 11:24


Fehlermeldung bei Programmstart
 
Hallo,

habe eben eine Kleinigkeit in einem Programm geändert, nichts grosses, habe nur eine "ShowMessage" eingebaut.

Wenn ich jetzt das Programm starte kommt eine Fehlermeldung:

"Zugriffsverletzung bei Adresse 0054575E Modul 'Project1.exe', Lesen von Adresse 000002F4."

Was bedeutet den die Fehlermeldung?

Jens Schumann 27. Jun 2003 11:29

Hallo,
die Fehlermeldung bedeutet, das Deine Änderung eine Zugriffsverletzung erzeugt.
Wie wäre es mit ein bißchen Source ?

Tim.exe 27. Jun 2003 11:36

Also wenn dan ist ja nur der code im OnCreate interessant:

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
var verz: String;
begin
     verz := ExtractFilePath(ParamStr(0));
     Table1.Active := False;
     try
     Table1.Databasename := verz;
     Table1.TableName := 'jaab.db';
     Table1.Active := True
     except
     MessageBeep(0);
     ShowMessage('Die Tabelle "jaab.db" befindet' + #13#10 + ' sich nicht im aktuellen Verzeichnis!')
     end;
Und wie gesagt, vorhin ging noch alles und im OnCreate hatte ich ja auch nichts geändert...

Gehen tut ja auch alles, das Programm wird gestartet und es funktioniert, nur eben die Fehlermeldung kommt als erstes...

Gregor 27. Jun 2003 11:50

Auf das, du zugreifst, ist es geschützt,versteckt etc?

Weil ich würd sagen das dort wqas nicht stimmt :)

Tim.exe 27. Jun 2003 12:10

Da ist nichts Schreibgeschützt oder versteckt... :cry:

Yheeky 27. Jun 2003 12:47

Hast du vielleicht noch mehrere Formulare? Vielleicht greifst du ja auch auf Dinge zu, die noch nicht erstellt wurden. Schau mal in die OnCreate Funktion von anderen Formularen, falls welche existieren.

Tim.exe 27. Jun 2003 12:52

Hab ich ausprobiert, habe alle OnShow und OnCreate und ShowMessage auskommentiert, der Fehler kommt trotzdem...

Yheeky 27. Jun 2003 20:41

Was verwendest du sonst noch so für Komponenten? Welches OS hast du? Gibt z.B. eine Komponente namens "SmartListView", die unter WinXP Probleme macht...

Gruß Yheeky

Tim.exe 28. Jun 2003 19:09

Hallo,

ich weiss jetzt woran es liegt, und zwar:

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
var savestat: TIniFile;
var verz: String;
begin
savestat := TIniFile.Create(ExtractFilepath(Application.Exename)+'settings.ini');
try
CheckBox1.Checked:=savestat.ReadBool('Copper', 'Status', CheckBox1.Checked);
CheckBox2.Checked:=savestat.ReadBool('Modern', 'Status', CheckBox2.Checked);
CheckBox3.Checked:=savestat.ReadBool('Lime', 'Status', CheckBox3.Checked);
CheckBox4.Checked:=savestat.ReadBool('WinXP', 'Status', CheckBox4.Checked);
CheckBox5.Checked:=savestat.ReadBool('Hints', 'Status', CheckBox5.Checked);
finally
savestat.Free;
end;

verz := ExtractFilePath(ParamStr(0));
     Table1.Active := False;
     try
     Table1.Databasename := verz;
     Table1.TableName := 'jaab.db';
     Table1.Active := True
     except
     MessageBeep(0);
     ShowMessage('Die Tabelle "jaab.db" befindet' + #13#10 + ' sich nicht im aktuellen Verzeichnis!')
     end;

end;
Genauer gesagt am ersten Teil, wenn ich den Ini-Part auskommentiere, kommt keine Fehlermeldung. Aber was ist falsch? So lese ich immer aus *.ini's, in fast jedem Programm und es kommt sonst nie so eine Fehlermeldung...

Stanlay Hanks 28. Jun 2003 19:16

Enthalten auch alle diese Einträge einen Boolschen Wert?

Tim.exe 28. Jun 2003 19:20

Ja, und es funktionierte ja auch tadellos am Anfang, habe dann etwas ganz anderes in dem Programm geändert (nur ein einfaches ShowMessage eingebaut) und seit dem kommt die Fehlermeldung die ja anscheinend am OnCreate der *.ini liegt.

Christian Seehase 28. Jun 2003 19:39

Moin Tim,

scheint ja recht unwahrscheinlich, dass es an dem INI Abschnitt liegt.

Verschieb' doch einfach mal die OnCreate Prozedur an eine andere Stelle, und schau mal nach, ob das Auskommentieren des INI Abschnittes immer noch den Fehler vermeidet.

Ich weiss zwar nicht wodurch das verursacht wird, aber ich vermute mal, dass irgendwo ein Speicherbereich überschrieben wird.

Tim.exe 28. Jun 2003 20:02

Hab ich gemacht, der Fehler kommt immer noch, nach auskommentieren des Ini-Abschnitts kommt er nicht :cry:

Christian Seehase 28. Jun 2003 20:19

Moin Tim,

verwendest Du irgendwo Pointer, oder Speicher den Du selber reservierst?
Sprichst Du irgendwo Zeichen in Strings über einen Index an?

Tim.exe 28. Jun 2003 20:50

Hallo,

es ist nichts dergleichen drin.

Christian Seehase 28. Jun 2003 21:19

Moin Tim,

ein paar Sachen die der Kontrolle wert sein könnten fallen mir noch ein.

Was ich vorhin noch vergessen hatte:
Benutzt Du initialization/finalization Abschnitte?
Die werden immerhin ganz früh abgearbeitet.

Hast Du mal, speziell aus der Unit mit Form1, die unnötigen Units aus Uses entfernt? Standardmässig steht da oft überflüssiges.

Da der Fehler immer durch auskommentieren des Ini Abschnittes zu vermeiden ist:
Du könntest mal Application.Exename durch paramstr(0) austauschen.

Hast Du auch mal versucht alle erzeugten Dateien des Projektes (DCU/EXE/DLL) zu löschen (vielleicht auch vorher sichern, falls doch nicht alles eigene waren ;-) ) und dann das Projekt neu zu erzeugen?

Dann fiele mir nur noch ein ganz (zeit)aufwändiger Weg ein.
Breakpoint in der Projektdatei auf das Create des Formulares, CPU Fenster auf, und dann im Einzelschritt (F7, vielleicht F8) dadurch.
Ob es was bringt *schulterzuck*.

Das einzige was sicher ist:
Wenn Du nicht die Ladeadresse Deines Programmes verändert hast tritt der Fehler auf jeden Fall innerhalb Deines Programmes auf, nicht in irgendeiner DLL (zumal der Modulname ja auch sehr dafür spricht)

Tim.exe 28. Jun 2003 21:39

Hab alles ausprobiert, habe keinen initialization/finalization - Passus
und auch die anderen Tips ergeben keine Besserung.

Tja, den muss ich das ganze wohl nochmal machen, schade den das Programm wäre fix und fertig :cry:

Vielen Dank für eure Hilfe :D

Christian Seehase 28. Jun 2003 21:46

Moin Tim,

eine Sache könnte das aber erleichtern:

Mach zweimal eine Delphi IDE auf.

Dann kannst Du auch die Controls mit allen ihren Einstellungen auf die neuen Formulare kopieren.

Das jeweilige Formular sollte dann aber vorher schon richtig eingestellt werden. Im Wesentlichen die Grösse. Sonst verschieben sich die Controls.

Stanlay Hanks 28. Jun 2003 21:47

Also bevor du nochmal alles neu machst: Ich hatte auch mal das gleiche Problem: Andauernd ungültige Speicherzugriffe...Ich glaub...ich hab damals Delphi neu iinstalliert und dann gings wieder...wobei ich da eigentlich keinen deutlichen Zusammenhang sehen kann...aber möglich is ja alles (theoretisch :wink:).

Ich wünsch dir auf jeden Fall noch viel Glück.
Man liest sich, Stanlay

Tim.exe 28. Jun 2003 23:53

@Stanley:

Das wäre dann aber komisch, den ich nutze in der Arbeit und zu Hause Delphi 6 Prof und bei beiden (mit beiden Anwendugen kompiliert) kommt dieser Fehler...

r_kerber 29. Jun 2003 10:23

*bloßmalsoimkaffeesatzrumstocher*: Hast Du mal überprüft, ob die ini-Datei tatsächlich (noch) in dem festgelegten Verzeichnis steht. Also überprüfe mal den Wert von ExtractFilepath(Application.Exename)+'settings.ini '

Tim.exe 29. Jun 2003 10:44

Hallo,

ja habe ich gemacht, habe auch mal die Ini manuell gelöscht, beim starten und beenden des Programms wird wieder eine neue erzeugt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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 by Thomas Breitkreuz