![]() |
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? |
Hallo,
die Fehlermeldung bedeutet, das Deine Änderung eine Zugriffsverletzung erzeugt. Wie wäre es mit ein bißchen Source ? |
Also wenn dan ist ja nur der code im OnCreate interessant:
Delphi-Quellcode:
Und wie gesagt, vorhin ging noch alles und im OnCreate hatte ich ja auch nichts geändert...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; Gehen tut ja auch alles, das Programm wird gestartet und es funktioniert, nur eben die Fehlermeldung kommt als erstes... |
Auf das, du zugreifst, ist es geschützt,versteckt etc?
Weil ich würd sagen das dort wqas nicht stimmt :) |
Da ist nichts Schreibgeschützt oder versteckt... :cry:
|
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.
|
Hab ich ausprobiert, habe alle OnShow und OnCreate und ShowMessage auskommentiert, der Fehler kommt trotzdem...
|
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 |
Hallo,
ich weiss jetzt woran es liegt, und zwar:
Delphi-Quellcode:
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...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; |
Enthalten auch alle diese Einträge einen Boolschen Wert?
|
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.
|
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. |
Hab ich gemacht, der Fehler kommt immer noch, nach auskommentieren des Ini-Abschnitts kommt er nicht :cry:
|
Moin Tim,
verwendest Du irgendwo Pointer, oder Speicher den Du selber reservierst? Sprichst Du irgendwo Zeichen in Strings über einen Index an? |
Hallo,
es ist nichts dergleichen drin. |
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) |
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 |
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. |
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 |
@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... |
*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 '
|
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