Sign in Join
Wiki copytemporary

ExitProc/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# ExitProc
22
33**ExitProc**, kann man eine Procedure zuweisen, welche bei Programm-Ende aufgerufen wird.\
44Auch bei Beendigungen durch eine Laufzeitfehler.\
5-\
5+
66Es wird empfohlen die alte **ExitProc** zu sichern, und dies bei der neuen **ExitProc** wieder aufzurufen.
77
88## Beispiel
99
1010In diesem Beispiel, wird bewusst eine Datei geöffnet, welche es nicht gibt.
1111
1212``` pascal
1313program ExitProc_Example;
1414
1515const
1616 MyExitCode = 123;
1717
1818var
1919 OldExitProc: Pointer;
2020
2121 procedure Ende;
2222 begin
2323 WriteLn('Das ist das Ende');
2424 case ExitCode of
2525 2: begin
2626 WriteLn('Datei nicht gefunden');
2727 end;
2828 MyExitCode: begin
2929 WriteLn('Es wurde bewusst mit ', MyExitCode, ' abgebrochen');
3030 end;
3131 else begin
3232 WriteLn('Fehler: ', ExitCode);
3333 end;
3434 end;
3535 ExitProc := OldExitProc;
3636 end;
3737
3838var
3939 f: file;
4040
4141begin
4242 // Alte ExitProc sichern.
4343 OldExitProc := ExitProc;
4444
4545 // Neue ExitProc zuweisen.
4646 ExitProc := @Ende;
4747
4848 // Eine Datei öffnen, welche es nicht gibt.
4949 Assign(f, 'abc.txt');
5050
5151 // Dies löst einen Laufzeitfehler 2 aus.
5252 Reset(f);
5353
5454 // Mit eigenem Code abbrechen.
5555 Halt(MyExitCode);
5656
5757end.
5858```
5959
6060# ExitCode
6161
6262**ExitCode** gibt den Fehlercode an, mit welchen der Abbruch kommt. In der Regel, wen **ExitCode** 0 ist, wurde das Programm normal beendet.
6363
6464## Durch Laufzeitfehler
6565
6666ZB. bei einer Bereichsüberschreitung bekommt **ExitCode** 201.
6767
6868``` pascal
6969var
7070 a: array[0..3] of byte;
7171
7272begin
7373 OldExitProc := ExitProc;
7474 ExitProc := @Ende;
7575
7676 // Bereich bewusst überschritten.
7777 a[4] := 12;
7878```
7979
8080## Mit erzwungenem Ende
8181
8282Wen man ein Programm-Ende mit **Halt()** erzwingt, wird **ExitProc** trotzdem aufgerufen.\
8383Wen man Halt(num), dann wird **num** als **ExitCode** interpretiert. In diesem Beispiel hat dann der **ExitCode** 123.
8484
8585``` pascal
8686 Halt(123);
8787```
8888
8989## Siehe auch
9090
9191- [[AddExitProc/de|AddExitProc]] - Programm-Ende in einer ExitProc-List zufügen.
9292
9393Autor: Mathias
9494
9595---
9696*From the Free Pascal wiki, page "ExitProc/de", as it stood on 2020-05-19 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history