Moin.
Ich habe gerade einen immer wieder rekonstruierbaren Fehler, der scheinbar nicht in meinem Code auftritt.
Wiefolgt: meine
DLL (im folgenden als "ich" bezeichnet) exportiert eine Initialisierungs- und eine Deinitialisierungsfunktion. Die Anwendung (im folgenden "es", nicht von mir entwickelt) ruft die eine beim Starten, die andere beim Beenden auf. So weit, so gut.
Nun kommt es aber manchmal, dass Es meine Deinit. auch zur Laufzeit aufruft und später wieder die Init. Das funktioniert immer noch. Aber danach ruft es eine weitere Funktion meiner
DLL auf. Die läuft durch, kann ich im Debugger schrittweise verfolgen. Er kommt bis zum abschließenden "end;" dieser Funktion. Klicke ich nun nochmal auf Einzelschritt, kommt folgender Fehler:
Zitat:
access violation at 0+0012fb96: read of address 0x00120001
und ein "CPU"-Fenster tut sich auf. Ich habe mit IDA einen Debug-Trace angefertigt, ab dem letzten möglichen Source-Haltepunkt (denke ich zumindest, es müsste die retn-Anweisung der zugehörigen Funktion sein) bis zu der
Exception:
Code:
00001D10 CODE:HarmonyInitWave+44 retn HarmonyInitWave returned to rpg2000.exe:0050C457
00001D10 rpg2000.exe:0050C457 retn returned to Stack[00001D10]:0012FB94
00001D98 ST0= 1.041310961582891512e-2504 ST1= 0.0 ST2= 8.0616745606685941392e-2505 ST3= 3.5949607961044423618e3498 ST4= 0.0 ST5= 1.0 ST6= 1.0 ST7= 4.8770310000000001828e6 CTRL=1372 CS=1B DS=23 ES=23 FS=3B GS=0 SS=23 EAX=12FAC4 EBX=BE26E4 ECX=FFFFFFFE EDX=DA2240 ESI=BEFCA8 EDI=BEDF28 EBP=12FADC ESP=12FAD4 EFL=200282
00001D98 CODE:HarmonyInitWave+37 retn ESP=12FAD8
00001D98 CODE:HarmonyInitWave:loc_DA222F mov al, [ebp+var_1] EAX=12FA01
00001D98 CODE:HarmonyInitWave+42 pop ecx ECX=1000000 ESP=12FADC
00001D98 CODE:HarmonyInitWave+43 pop ebp EBP=12FB5C ESP=12FAE0
00001D98 CODE:HarmonyInitWave+44 retn ESP=12FAE4
00001D98 CODE:HarmonyInitWave+44 retn HarmonyInitWave returned to rpg2000.exe:0050C457
00001D98 rpg2000.exe:0050C457 retn ESP=12FAE8
00001D98 rpg2000.exe:0050C457 retn returned to Stack[00001D98]:0012FB94
00001D98 Stack[00001D98]:0012FB94 aam 0FDh EAX=120001 SF=0
00001D98 0012FB96 EFL=210302 TF=1 RF=1
Kann damit jemand etwas anfangen? Ich nämlich nicht.
Wenn man bei geworfener
exception in Delphi das Programm weiterlaufen lässt kommt wieder derselbe Fehler an derselben Stelle. Lässt man es ohne Debugger laufen, beendet sich einfach die Host-Anwendung. Die Deinitialisierungsmethode gibt alle in der Init. createten Resourcen wieder frei. (Wenn man beide Funktionen komplett leert, tritt derselbe Fehler auf.)
Ich hoffe mir kann jemand hier helfen. Wenn ihr mehr Informationen braucht, sagt bescheid.