Hallo,
hier mal wieder ein Mehrere-Stunde-Fehlersuche-Report.
Um während der Programmentwickung bestimmte Sachen anzeigen zu könne, habe ich folgedes Macro definiert. Klappt auch super.
#define MessageBox(txt) { \
UserStandardDialog ( (char *)0,(char *)0,(char *)0,(char *)0,txt, \
(( CDT_NOTIFICATION << CDBF_DIALOG_TYPE_OFFSET) | \
( GIT_NOTIFICATION << CDBF_INTERACTION_TYPE_OFFSET)) ); \
}
[font='Lucida Sans, Monaco, Geneva, sans-serif']Nun hatte ich in einer Methode, der ich einen Pointer auf einen String übergebe, ständig Abstürze mit den wildesten Fehlermeldungen. Es war einfach kein System zu entdecken und manchmal ging es sogar. Ursache war letztlich der Aufruf von UserStandardDialog über obiges Macro.
[font='Lucida Sans, Monaco, Geneva, sans-serif']Folgendes produziert Fehler am laufenden Band:
handlerAdress = LMemDerefHandles(OptrToHandle(oself), handlerAdressChunk);
....
MessageBox(stringPtr);
....
LauncherExecuteHandler(handlerAdress, ...)
[font='Lucida Sans, Monaco, Geneva, sans-serif']Während das hier
[font='Courier New, Courier, mono']
....
MessageBox(stringPtr);
....
handlerAdress = LMemDerefHandles(OptrToHandle(oself), handlerAdressChunk);
LauncherExecuteHandler(handlerAdress, ...)
[/font][/font][/font][/font][font='Lucida Sans, Monaco, Geneva, sans-serif'][font='Lucida Sans, Monaco, Geneva, sans-serif'][font='Lucida Sans, Monaco, Geneva, sans-serif'][font='Courier New, Courier, mono']
[font='Lucida Sans, Monaco, Geneva, sans-serif']fehlerfrei läuft.[/font]
[font='Lucida Sans, Monaco, Geneva, sans-serif']Offensichtlich verschiebt UserStandardDialog() den aktuellen Objekt-Block und damit ist der Pointer handlerAdress ungültig. Wer hätte das gedacht?[/font]
[font='Lucida Sans, Monaco, Geneva, sans-serif']Gruß[/font]
[font='Lucida Sans, Monaco, Geneva, sans-serif']Rainer[/font][/font][/font][/font][/font]