![]() |
Fehler beim Beenden meines Programmes
Hallo liebe DP-Gemeinde,
ich habe einen Fehler, dem ich nicht auf die Schliche komme. Beim Beenden meines Programmes schreibe ich einige Werte aus einem Record, der Strings, Boolean und Integer Variablen beinhaltet, in eine Datei. Dies passiert im FormClose() Aufruf. Dabei bekomme ich abundzu eine Fehler Meldung (Error 216). Das Debuggen funktioniert nicht in diesem Fall. Was kann ich tun? MfG Terence |
AW: Fehler beim Beenden meines Programmes
Schon mal gegooglet, was Fehler 216 ist? :?
|
AW: Fehler beim Beenden meines Programmes
Zitat:
Bei Runtime Error 216 würde ich als erstes einmal schauen, ob ![]() |
AW: Fehler beim Beenden meines Programmes
Dann versuche doch mal gewisse Stellen im Code mit Kommentar-Slashs zu deaktivieren. Wenn's ohne Fehler läuft dann war das diese Stelle. :wink:
|
AW: Fehler beim Beenden meines Programmes
Kleine Hilfe 216 ist eine Access Violation. Du greifst auf ein Objekt zu, welches nicht mehr existiert. Etwas Quellecode wäre ganz gut, sonst können wir nur raten.
|
AW: Fehler beim Beenden meines Programmes
Klingt wie eine mal initialisierte mal nicht initialisierte globale Variable..........
Gruß K-H |
AW: Fehler beim Beenden meines Programmes
Eher dass die VCL im OnClose der Form schon Objekte abräumt, auf die er noch zugreift.
|
AW: Fehler beim Beenden meines Programmes
Ich nutze bei sowas "CloseQuery" und setze dann eine globale Variable ("AppClosed") auf true. Dann behandle ich CloseQuery nur noch, wenn AppClosed <> true ist. Ist für den Fall, dass die Anwendung nicht korrekt stirbt.
|
AW: Fehler beim Beenden meines Programmes
Zitat:
Gruß K-H |
AW: Fehler beim Beenden meines Programmes
Vielen Dank fuer all die guten Hinweise.
Ich habe es jetzt herausgefunden und erklaere es, vllt kann der eine oder andere diesen Fehler dann vermeiden. Ich schreibe mit BlockWrite einen Record in eine Binaerdatei innerhalb der Methode OnFormClose(). Der Rekord enthaelt verschiedene Variablentypen: type TCfg = record i : integer; b : boolean; a : array[0..99] of byte; t : string[64]; s : string; end; {record} Jetzt habe ich eine Konstante deklariert: const CfgSizeOf = SizeOf(TCfg); Und eine Variable Cfg: var Cfg : TCfg; Beim Schreiben in die Binaerdatei verwende ich BlockWrite wie folgt: function _write_cfg_into_file: boolean; var F : File Of Byte; ior : integer; begin ior:=0; AssignFile(F, 'C:\CfgFile.cfg'); FileMode:=fmOpenReadWrite; {$I-} ReWrite(F); {$I+} inc(ior, IOResult); {$I-} BlockWrite(F, Cfg, CfgSizeOf, nw); {$I+} inc(ior, IORESULT); if (nw <> CfgSizeOf) then inc(ior); {$I-} CloseFile(F); {$I+} inc(ior, IOResult); result:=(ior = 0); end; {function} Der Fehler liegt daran, und er taucht nicht jedesmal auf, doch wenn er auftaucht, dann sehe ich im TaskManager den Programmnamen stehen, obwohl das Programm bereits beendet ist. Also der Fehler ist, dass ich einen Allow Huge Strings Compilerschalter gesetzt habe und in der Rekordvariablen s : string einen beliebig langen Text stehen haben kann, der auch ein Leerstring sein kann. Beim Initialisieren des Programmes, und wenn noch keine Cfgdatei existiert, wird dieser String s:=''; gesetzt. Die Konstante CfgSizeOf hat aber einen festen Wert bekommen und versucht mit BlockWrite diesen Wert zu schreiben, der nicht immer stimmen muss. Fehlerbehebung: Ich habe die s : string in s : string[255] umgewandelt und der Fehler taucht nicht mehr auf. Danke fuer Eure Geduld und Eure Hilfe, schoene Gruesse, Terence |
AW: Fehler beim Beenden meines Programmes
Zitat:
im Rekord TCfg die Zeile s : string; auskommentiert habe. Danke Dir (Euch) Vielmals, Terence. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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