3.22 DM_ExceptionHandler
Mit Hilfe dieser Funktion kann ein Handler installiert werden, der mögliche "asserts" im Dialog Manager abfangen und eine geeignete Nachricht an den Benutzer ausgeben kann. Zusätzlich kann der Handler Datenbanken und Dateien schließen und so in einem definierten Zustand hinterlassen.
DM_Boolean DML_default DM_EXPORT DM_ExceptionHandler
(
DM_ExceptionHandlerProc funcp,
DM_UInt operation,
DM_Options options
)
Parameter
-> DM_ExceptionHandlerProc funcp
Dieses ist ein Zeiger auf die Funktion, die als Exception-Handler installiert werden soll.
-> DM_Uint operation
In diesem Parameter wird die Aufgabe angegeben, die ausgeführt werden soll. Dabei gibt es folgende Werte:
DMF_RegisterHandler |
Handlerfunktion soll installiert werden |
DMF_EnableHandler |
Handlerfunktion soll wieder aufgerufen werden |
DMF_DisableHandler |
Handlerfunktion soll nicht mehr ausgerufen werden |
DMF_WithdrawHandler |
Handlerfunktion soll abgemeldet werden |
-> DM_Options options
Zur Zeit unbenutzt, muss 0 sein.
Rückgabewert
TRUE |
Handlerfunktion erfolgreich installiert |
FALSE |
Handlerfunktion nicht installiert |
Der Aufruf wird im logfile protokolliert. Der erste Aufruf wird mitgetraced. Folgende, rekursive Aufrufe werden nicht ins tracefile geschrieben da sonst Endlosschleifen entstehen können. Der ExceptionHandler wird nicht mehr aufgerufen bei einem assert in der assfail-Funktion. Das Trace/Logfile enthält file, line und assertion. Das Ende des Aufrufs wird ebenfalls mit protokolliert (mit Parameter DM_ExceptionInfo)
Sind mehrere Funktionen aktiv, dann werden diese nacheinander aufgerufen. Die Reihenfolge ist in umgekehrter Reihenfolge des Anmeldens. Die Funktionen arbeiten auf dem gleichen DM_ExceptionInfo. D.h. setzt eine Funktion eine message, dann kann sie durch eine weitere Funktion überschrieben werden. Ebenso showmessage.
Die zu installierende Funktion muss dabei wie folgt definiert sein:
typedef void (DML_default DM_CALLBACK *DM_ExceptionHandlerProc) __((DM_ExceptionInfo *info));
{
// user info, not changeable
DM_String file;
DM_Integer line;
DM_String assertion;
// output, changeable
DM_String message; // default (char *)0
DM_Boolean showMessage; // default TRUE
} DM_ExceptionInfo;
Die Einträge der Struktur entsprechen denen der assertion. Diese Werte sind nicht vom Benutzer änderbar.
message wird mit NULL-Pointer übergeben. Hier hat der Benutzer die Möglichkeit eine eigene Nachricht sich auszudenken, statt der Message "Contact your local ....". Ist message NULL-Pointer, dann wird weiterhin unsere Message ausgegeben.
showMessage gibt an, ob eine Nachricht ausgegeben werden soll.