Difference between revisions of "ExitProc/de"
(Created page with "{{Translate}} =ExitProc= '''ExitProc''', kann man eine Procedure zuweisen, welche bei Programm-Ende aufgerufen wird.<br> Auch bei Beendigungen durch eine Laufzeitfehler.<br><...") |
|||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{ExitProc}} |
=ExitProc= | =ExitProc= | ||
+ | |||
'''ExitProc''', kann man eine Procedure zuweisen, welche bei Programm-Ende aufgerufen wird.<br> | '''ExitProc''', kann man eine Procedure zuweisen, welche bei Programm-Ende aufgerufen wird.<br> | ||
Auch bei Beendigungen durch eine Laufzeitfehler.<br><br> | Auch bei Beendigungen durch eine Laufzeitfehler.<br><br> | ||
Line 7: | Line 8: | ||
==Beispiel== | ==Beispiel== | ||
+ | |||
In diesem Beispiel, wird bewusst eine Datei geöffnet, welche es nicht gibt. | In diesem Beispiel, wird bewusst eine Datei geöffnet, welche es nicht gibt. | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang="pascal"> |
− | program | + | program ExitProc_Example; |
+ | |||
+ | const | ||
+ | MyExitCode = 123; | ||
var | var | ||
Line 18: | Line 23: | ||
begin | begin | ||
WriteLn('Das ist das Ende'); | WriteLn('Das ist das Ende'); | ||
− | + | case ExitCode of | |
− | + | 2: begin | |
− | + | WriteLn('Datei nicht gefunden'); | |
− | + | end; | |
+ | MyExitCode: begin | ||
+ | WriteLn('Es wurde bewusst mit ', MyExitCode, ' abgebrochen'); | ||
+ | end; | ||
+ | else begin | ||
+ | WriteLn('Fehler: ', ExitCode); | ||
+ | end; | ||
end; | end; | ||
ExitProc := OldExitProc; | ExitProc := OldExitProc; | ||
Line 41: | Line 52: | ||
// Dies löst einen Laufzeitfehler 2 aus. | // Dies löst einen Laufzeitfehler 2 aus. | ||
Reset(f); | Reset(f); | ||
+ | |||
+ | // Mit eigenem Code abbrechen. | ||
+ | Halt(MyExitCode); | ||
+ | |||
end. | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =ExitCode= | ||
+ | |||
+ | '''ExitCode''' gibt den Fehlercode an, mit welchen der Abbruch kommt. In der Regel, wen '''ExitCode''' 0 ist, wurde das Programm normal beendet. | ||
+ | |||
+ | ==Durch Laufzeitfehler== | ||
+ | |||
+ | ZB. bei einer Bereichsüberschreitung bekommt '''ExitCode''' 201. | ||
+ | |||
+ | <syntaxhighlight lang="pascal"> | ||
+ | var | ||
+ | a: array[0..3] of byte; | ||
+ | |||
+ | begin | ||
+ | OldExitProc := ExitProc; | ||
+ | ExitProc := @Ende; | ||
+ | |||
+ | // Bereich bewusst überschritten. | ||
+ | a[4] := 12; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Mit erzwungenem Ende== | ==Mit erzwungenem Ende== | ||
− | Wen man ein Programm-Ende mit '''Halt()''' erzwingt, wird '''ExitProc''' aufgerufen.<br> | + | |
− | In diesem Beispiel hat dann '''ExitCode''' 123. | + | Wen man ein Programm-Ende mit '''Halt()''' erzwingt, wird '''ExitProc''' trotzdem aufgerufen.<br> |
− | <syntaxhighlight> | + | Wen man Halt(num), dann wird '''num''' als '''ExitCode''' interpretiert. |
+ | In diesem Beispiel hat dann der '''ExitCode''' 123. | ||
+ | |||
+ | <syntaxhighlight lang="pascal"> | ||
Halt(123); | Halt(123); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ==Siehe auch== | ||
+ | |||
+ | * [[AddExitProc/de|AddExitProc]] - Programm-Ende in einer ExitProc-List zufügen. | ||
Autor: [[User:Mathias|Mathias]] | Autor: [[User:Mathias|Mathias]] | ||
− | |||
− |
Latest revision as of 01:42, 20 May 2020
│
Deutsch (de) │
English (en) │
ExitProc
ExitProc, kann man eine Procedure zuweisen, welche bei Programm-Ende aufgerufen wird.
Auch bei Beendigungen durch eine Laufzeitfehler.
Es wird empfohlen die alte ExitProc zu sichern, und dies bei der neuen ExitProc wieder aufzurufen.
Beispiel
In diesem Beispiel, wird bewusst eine Datei geöffnet, welche es nicht gibt.
program ExitProc_Example;
const
MyExitCode = 123;
var
OldExitProc: Pointer;
procedure Ende;
begin
WriteLn('Das ist das Ende');
case ExitCode of
2: begin
WriteLn('Datei nicht gefunden');
end;
MyExitCode: begin
WriteLn('Es wurde bewusst mit ', MyExitCode, ' abgebrochen');
end;
else begin
WriteLn('Fehler: ', ExitCode);
end;
end;
ExitProc := OldExitProc;
end;
var
f: file;
begin
// Alte ExitProc sichern.
OldExitProc := ExitProc;
// Neue ExitProc zuweisen.
ExitProc := @Ende;
// Eine Datei öffnen, welche es nicht gibt.
Assign(f, 'abc.txt');
// Dies löst einen Laufzeitfehler 2 aus.
Reset(f);
// Mit eigenem Code abbrechen.
Halt(MyExitCode);
end.
ExitCode
ExitCode gibt den Fehlercode an, mit welchen der Abbruch kommt. In der Regel, wen ExitCode 0 ist, wurde das Programm normal beendet.
Durch Laufzeitfehler
ZB. bei einer Bereichsüberschreitung bekommt ExitCode 201.
var
a: array[0..3] of byte;
begin
OldExitProc := ExitProc;
ExitProc := @Ende;
// Bereich bewusst überschritten.
a[4] := 12;
Mit erzwungenem Ende
Wen man ein Programm-Ende mit Halt() erzwingt, wird ExitProc trotzdem aufgerufen.
Wen man Halt(num), dann wird num als ExitCode interpretiert.
In diesem Beispiel hat dann der ExitCode 123.
Halt(123);
Siehe auch
- AddExitProc - Programm-Ende in einer ExitProc-List zufügen.
Autor: Mathias