Wählen Sie oben rechts eine andere Programmiersprache aus.

Wählen Sie oben rechts eine andere Programmiersprache aus.

Wählen Sie oben rechts eine andere Programmiersprache aus.

throwT_throwThrowThrow (Operator)

Name

throwT_throwThrowThrow — Werfen einer benutzerdefinierten oder Weiterwerfen einer mit catchcatchCatchCatchCatch abgefangenen Exception.

Signatur

throw( : : Exception : )

Herror T_throw(const Htuple Exception)

void Throw(const HTuple& Exception)

static void HOperatorSet.Throw(HTuple exception)

Beschreibung

Die Operatoren trytryTryTryTry, catchcatchCatchCatchCatch, endtryendtryEndtryEndtryEndtry und throwthrowThrowThrowThrow erlauben es, in HDevelop-Programme Code für eine dynamische Fehlerbehandlung ähnlich zu den Programmiersprachen C++ oder C# einzubauen. Grundlegende Informationen zur Fehlerbehandlung in HDevelop finden sich außerdem bei den Operatoren trytryTryTryTry und dev_set_checkdev_set_checkDevSetCheckDevSetCheckDevSetCheck sowie im „HDevelop User's Guide“.

Der Operator throwthrowThrowThrowThrow erlaubt es, an einer beliebigen Stelle im Programm eine Exception zu werfen. Diese kann dann mit dem catchcatchCatchCatchCatch-Operator eines umgebenen trytryTryTryTry-catchcatchCatchCatchCatch-Blocks gefangen werden. Dadurch ist es dem Entwickler möglich, eigene Fehler- oder Ausnahmezustände zu definieren, bei denen die normale Programmausführung -- auch über Prozedurgrenzen hinweg -- abgebrochen und in einen Fehlerbehandlungszweig gesprungen wird, beispielsweise um reservierte Ressourcen freizugeben.

Bei einer solchen anwenderdefinierten Exception kann ein nahezu beliebiges Tupel als ExceptionExceptionExceptionExceptionexception-Objekt geworfen werden, es sollte lediglich das erste Element des Tupels auf einen Fehlercode >= 30000 gesetzt werden. Können unterschiedliche anwenderdefinierte Ausnahmezustände auftreten, können diese über verschiedene Fehlercodes (>= 30000) im ersten Element oder über zusätzliche Elemente unterschieden werden.

Darüber hinaus erlaubt der throwthrowThrowThrowThrow-Operator eine mit catchcatchCatchCatchCatch gefangene Exception weiter zu werfen. Das ist beispielsweise dann sinnvoll, wenn innerhalb eines inneren trytryTryTryTry-catchcatchCatchCatchCatch-endtryendtryEndtryEndtryEndtry-Blocks, z.B. innerhalb einer Prozedur, die anderen Anwendungen bereitgestellt wird, nur auf bestimmte Fehler reagiert werden soll oder kann, und andere Fehler an den Aufrufer weitergereicht werden müssen.

In diesem Fall kann das mit catchcatchCatchCatchCatch gefangene ExceptionExceptionExceptionExceptionexception-Tupel einfach als ExceptionExceptionExceptionExceptionexception-Parameter übergeben und direkt weitergereicht werden. Darüber hinaus ist es aber auch möglich, eigene Elemente an das ExceptionExceptionExceptionExceptionexception-Tupel hinten anzuhängen. Diese können dann in dem äußeren catchcatchCatchCatchCatch-Block mit Hilfe des Operators dev_get_exception_datadev_get_exception_dataDevGetExceptionDataDevGetExceptionDataDevGetExceptionData als 'user_data'"user_data""user_data""user_data""user_data" abgefragt werden:

try ... catch (Exception) ... UserData := ... throw ([Exception, UserData]) endtry

Achtung

Der Export der Operatoren trytryTryTryTry, catchcatchCatchCatchCatch, endtryendtryEndtryEndtryEndtry und throwthrowThrowThrowThrow ist nur in die Sprachen C++, C# und VisualBasic/.NET möglich, da nur sie das Werfen und Fangen von Exceptions über Prozedurgrenzen hinweg unterstützen. Beim Export nach C können diese Operatoren nicht unterstützt werden.

Parameter

ExceptionExceptionExceptionExceptionexception (input_control)  exception-array HTupleHTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Tupel mit den Fehlerdaten oder eigenen Fehlercodes.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert throwthrowThrowThrowThrow (als Operator) den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt und ein Fehlercode zurückgeliefert.

Siehe auch

trytryTryTryTry, catchcatchCatchCatchCatch, endtryendtryEndtryEndtryEndtry, dev_get_exception_datadev_get_exception_dataDevGetExceptionDataDevGetExceptionDataDevGetExceptionData, dev_set_checkdev_set_checkDevSetCheckDevSetCheckDevSetCheck

Modul

Foundation