home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
turbo4
/
procptr.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-12-08
|
2KB
|
50 lines
{ Copyright (c) 1985, 87 by Borland International, Inc. }
program ProcPtr;
{ Demonstriert, wie über einen Zeiger und inline-Anweisungen zwei
verschiedene Routinen (mit denselben Parametern) aufgerufen werden
können.
Die Prozedur CallProc ist als INLINE deklariert und wird vom Compiler
bei jedem Aufruf durch das Programm als eine Art Makro eingesetzt
(s. Kapitel 25). CallProc deklariert dieselben Parameter wie die
Prozeduren FirstProc und OtherProc. Die globale Variable
ProcAddr enthält die Adresse der aufzurufenden Prozedur - sie bestimmt,
ob ein Aufruf von CallProc entweder FirstProc oder OtherProc aktiviert.
HINWEIS: Die hier gezeigten Techniken sollten nur von Programmierern
mit Erfahrung in Maschinensprache angewendet werden.
}
var
ProcAddr : Pointer;
i : Integer;
procedure CallProc(var i : Integer; w : Word; s : string);
inline($FF/$1E/ProcAddr); { CALL FAR [ProcAddr] }
{$F+}
procedure FirstProc(var i : Integer; w : Word; s : string);
begin
Writeln('FirstProc:');
Writeln('i = ', i,' w = ', w, ' s = ', s);
end;
{$F-}
{$F+}
procedure OtherProc(var i : Integer; w : Word; s : string);
begin
Writeln('OtherProc:');
Writeln('i = ', i,' w = ', w, ' s = ', s);
end;
{$F-}
begin
ProcAddr := @FirstProc; { setzt ProcAddr auf FirstProc }
Writeln('Aufruf von CallProc, ProcAddr = FirstProc.... ');
CallProc(i, 7, 'irgendein Text');
ProcAddr := @OtherProc; { setzt ProcAddr auf OtherProc }
Writeln('Aufruf von CallProc, ProcAddr = OtherProc.... ');
CallProc(i, 5, 'noch mehr Text');
end.