Autor |
Beitrag |
dirksen
      
Beiträge: 23
Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
|
Verfasst: Do 31.05.12 14:46
Hallo,
ich habe folgendes Problem:
Ich habe ein Delphi 7 Projekt nach Delphi XE2 umgestellt. In dem Programm wird oft auf IniFiles zugegriffen.
Für den Zugriff werden TIniFile und TMemIniFile Objekte verwendet.
Beim Debuggen des Programms in Delphi XE2 kommt es ständig zu $C0000005 Exceptions wenn innerhalb von IniFile oder TMemIniFile auf die Strings zugegriffen wird. Die Exception selbst wird in der Datei GetMem.inc in der Funktion SysGetMem ausgelöst.
Dies passiert aber nicht grundsätzlich an der gleichen Stelle im Programm, sondern mal hier und mal dort in Funktionen die auf IniFiles zugreifen. Dabei kann es sein, dass das zig mal gut geht und dann erst die Exeption auftaucht.
Könnte das mit der Unicode Umstellung zwischen Delphi 7 und XE2 zu tun haben ?
Unter Delphi 7 funktioniert das Programm ohne Probleme.
Vielen Dank für Eure Hilfe
Gruß
Dirk Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Do 31.05.2012 um 16:39
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 31.05.12 15:03
Das wird nicht an den INI Dateien oder den Zugriffen liegen, sondern an korruptem Speicher. Nahe liegende Kandidaten sind Read / ReadBuffer und Write / WriteBuffer, wenn diese auf Strings angewendet werden usw. (weil Char = 2 Byte, vorher Char = 1 Byte).
|
|
dirksen 
      
Beiträge: 23
Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
|
Verfasst: Mo 04.06.12 08:32
Das dachte ich mir auch schon, aber die TIniFIles sind doch Unicode fähig. Habe mir mal den Spaß gemacht und alle IniFile zugriffe auf TMemIniFIle umgebogen, da man da ja noch ein TEncoding mitgeben kann, über dieses sollte, so dachte ich, dann der Zugriff 1 Byte / 2 Byte geregelt werden, funktioniert aber leider auch nicht.
Ich find da kein System dahinter, teilweise wird die Exception schon direkt beim ersten Zugriff ausgelöst, dann Funktioniert es beim nächsten Versuch wieder ein paar Minuten bis es zu dem Fehler kommt.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.06.12 08:57
Das Problem wird an ganz anderer Stelle liegen. Binde am besten einmal FastMM im FullDebugMode ein, das zeigt dir das Problem vielleicht. Auch die Bereichsprüfung in den Projektoptionen mag helfen.
|
|
dirksen 
      
Beiträge: 23
Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
|
Verfasst: Mo 04.06.12 12:52
jaenicke hat folgendes geschrieben : | Das Problem wird an ganz anderer Stelle liegen. Binde am besten einmal FastMM im FullDebugMode ein, das zeigt dir das Problem vielleicht. Auch die Bereichsprüfung in den Projektoptionen mag helfen. |
Danke für den Tip, habe jetzt den FastMM im FullDebugMode eingebunden und das Programm noch mal gestartet.
Ich hab jetzt ganz am Anfang eine EInvalidPointer Exception in einer Funktion bekommen, in der ein Mutex erstellt wird. Am Ende der Funktion wird Freemem aufgerufen, da trat die Exception auf.
Ich hab die Funktion jetzt mal auskommentiert und das Programm läuft ohne Probleme. Scheint so, als hätte es da was am Speicher "verbogen". Denke das beim erzeugen des Mutex beim erstellen des Namen AnsiString und Unicode String durcheinander geworfen wurden.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.06.12 13:01
Du kannst den relevanten Quelltext ja mal posten, dann lässt sich das genau sagen. 
|
|
|