set_unexpected (CRT)

Installiert eine eigene von unexpected aufzurufende Beendigungsfunktion.

Syntax

unexpected_function set_unexpected( unexpected_function unexpFunction );

Parameter

unexpFunction
Zeiger auf eine Funktion, die Sie schreiben, um die unexpected-Funktion zu ersetzen.

Rückgabewert

Gibt einen Zeiger auf die vorherige Beendigungsfunktion zurück, die von _set_unexpected registriert wurde, sodass die vorherige Funktion später wiederhergestellt werden kann. Wenn keine vorherige Funktion festgelegt wurde, kann der Rückgabewert verwendet werden, um das Standardverhalten wiederherzustellen. Dieser Wert kann sein NULL.

Hinweise

Die set_unexpected-Funktion installiert unexpFunction als Funktion, die von unexpected aufgerufen wird. unexpected wird in der aktuellen C++-Ausnahmebehandlungsimplementierung nicht verwendet. Der unexpected_function-Typ ist in EH.H als Zeiger auf eine benutzerdefinierte unerwartete Funktion, unexpFunction, definiert, die void zurückgibt. Ihre benutzerdefinierte unexpFunction Funktion sollte nicht zum Aufrufer zurückkehren.

typedef void ( *unexpected_function )( );

Standardmäßig ruft unexpectedterminate auf. Sie können das Standardverhalten ändern, indem Sie Ihre eigene Terminierungsfunktion schreiben und set_unexpected mit dem Namen der Funktion als Argument aufrufen. Die unexpected-Routine ruft immer die letzte Funktion auf, die für set_unexpected als Argument angegeben wurde.

Anders als die benutzerdefinierte Funktion, die durch einen Aufruf an set_terminate installiert wurde, kann aus unexpFunction heraus eine Ausnahme ausgelöst werden.

In einer Multithreadumgebung werden unerwartete Funktionen für jeden Thread separat verwaltet. Jeder neue Thread muss eine eigene unerwartete Funktion installieren. Daher ist jeder Thread für die eigene unerwartete Behandlung verantwortlich.

In der aktuellen Microsoft-Implementierung der C++-Ausnahmebehandlung ruft unexpected standardmäßig terminate auf und wird nie von der Laufzeitbibliothek für die Ausnahmebehandlung aufgerufen. Es gibt keinen besonderen Vorteil für anrufe unexpected statt terminate.

Es gibt einen einzelnen set_unexpected Handler für alle dynamisch verknüpften DLLs oder EXEs. Auch wenn Sie den Handler aufrufen set_unexpected , wird möglicherweise durch einen anderen oder einen Handler ersetzt, der durch eine andere DLL oder EXE festgelegt wird.

Anforderungen

Routine Erforderlicher Header
set_unexpected <eh.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Siehe auch

Ausnahmebehandlungsroutinen
abort
_get_unexpected
set_terminate
terminate
unexpected