Hallo,
ich ärgere ich bereits seit zwei Tagen mit einer
Exception herum, die mich langsam in den Wahnsinn treibt.
Das Programm in D2009.
Ich lege in einer
SQL-Datenbank einen Gruppenkopf an. Dann importiere ich ein paar Datensätze in die Bewegungsdatei.
Öffne ich jetzt das Bearbeitungsmodul, dann kommt es zu einer Excption immer an der gleichen Stelle. (Fehlermeldung in der Anlage)
Klicke ich die Fehlermeldung weg, dann funktioniert das Bearbeitungsmodul.
Bei allen folgenden Programmstarts funktioniert das Programm dann klaglos.
Wiederhole ich jetzt den Vorgang Datensätze löschen- Neuanlegen, dann kommt beim ersten Start des Bearbeitungsmoduls wieder einmalig der Fehler.
Mit der Datenbank (Firebird) kann es nicht zusammenhängen.
Ich habe vor dem Öffnen des Bearbeitungsmoduls ein Backup erzeugt. Nach dem Auftreten des Fehlers ein Restore. Dadurch wurde dieser nicht
reproduzierbar.
Irgendwie hängen die TMS - ADV Menüs da mit drin.
Ich kann den Fehler fast an beliebiger Stelle im Initialisierungsteil der Datenstruktur durch ein Application.Processmessages auslösen.
Dann rödelt er in den Menümessagesystem.
Meist wird eine Speicherschutzverletzung, manchmal auch ein EInvalidCast angezeigt.
Der Fehler selbst tritt in System.pas immer an der selben Stelle auf.
Delphi-Quellcode:
procedure GetDynaMethod;
{ function GetDynaMethod(vmt: TClass; selector: Smallint) : Pointer; }
asm
{ -> EAX vmt of class }
{ SI dynamic method index }
{ <- ESI pointer to routine }
{ ZF = 0 if found }
{ trashes: EAX, ECX }
PUSH EDI
XCHG EAX,ESI
JMP @@haveVMT
@@outerLoop:
MOV ESI,[ESI]
@@haveVMT:
MOV EDI,[ESI].vmtDynamicTable
TEST EDI,EDI
JE @@parent
MOVZX ECX,word ptr [EDI] <------ Fehlerstelle
Application.Processmessages in try except Block bringt nichts.
Hat wer eine Idee wo man noch suchen kann?
Für einen Tip dankbar.
Gruß
Peter