Difference between revisions of "ExitProc/de"

From Free Pascal wiki
Jump to navigationJump to search
Line 11: Line 11:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
program ExitProc_Example;
 
program ExitProc_Example;
 +
 +
const
 +
  MyExitCode = 123;
  
 
var
 
var
Line 18: Line 21:
 
   begin
 
   begin
 
     WriteLn('Das ist das Ende');
 
     WriteLn('Das ist das Ende');
     if ExitCode = 2 then begin
+
     case ExitCode of
      WriteLn('Datei nicht gefunden');
+
      2: begin
    end else begin
+
        WriteLn('Datei nicht gefunden');
      WriteLn('Fehler: ', ExitCode);
+
      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 50:
 
   // 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>
 
</syntaxhighlight>

Revision as of 18:33, 24 April 2018

Template:Translate

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.

Mit erzwungenem Ende

Wen man ein Programm-Ende mit Halt() erzwingt, wird ExitProc trotzdem aufgerufen.
In diesem Beispiel hat dann ExitCode 123.

  Halt(123);

Autor: Mathias