ExitProc/de

From Lazarus wiki
Jump to navigationJump to search

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