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));

 

typedef DM_ExceptionInfo

{

  // 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.