home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo4 / procptr.pas < prev    next >
Pascal/Delphi Source File  |  1987-12-08  |  2KB  |  50 lines

  1.  
  2. {           Copyright (c) 1985, 87 by Borland International, Inc.            }
  3.  
  4. program ProcPtr;
  5. { Demonstriert, wie über einen Zeiger und inline-Anweisungen zwei
  6.   verschiedene Routinen (mit denselben Parametern) aufgerufen werden
  7.   können.
  8.   Die Prozedur CallProc ist als INLINE deklariert und wird vom Compiler
  9.   bei jedem Aufruf durch das Programm als eine Art Makro eingesetzt
  10.   (s. Kapitel 25). CallProc deklariert dieselben Parameter wie die
  11.   Prozeduren FirstProc und OtherProc. Die globale Variable
  12.   ProcAddr enthält die Adresse der aufzurufenden Prozedur - sie bestimmt,
  13.   ob ein Aufruf von CallProc entweder FirstProc oder OtherProc aktiviert.
  14.  
  15.   HINWEIS: Die hier gezeigten Techniken sollten nur von Programmierern
  16.            mit Erfahrung in Maschinensprache angewendet werden.
  17. }
  18.  
  19. var
  20.   ProcAddr : Pointer;
  21.   i        : Integer;
  22.  
  23. procedure CallProc(var i : Integer; w : Word; s : string);
  24.   inline($FF/$1E/ProcAddr);   { CALL FAR [ProcAddr] }
  25.  
  26. {$F+}
  27. procedure FirstProc(var i : Integer; w : Word; s : string);
  28. begin
  29.   Writeln('FirstProc:');
  30.   Writeln('i = ', i,'  w = ', w, '  s = ', s);
  31. end;
  32. {$F-}
  33.  
  34. {$F+}
  35. procedure OtherProc(var i : Integer; w : Word; s : string);
  36. begin
  37.   Writeln('OtherProc:');
  38.   Writeln('i = ', i,'  w = ', w, '  s = ', s);
  39. end;
  40. {$F-}
  41.  
  42. begin
  43.   ProcAddr := @FirstProc;  { setzt ProcAddr auf FirstProc }
  44.   Writeln('Aufruf von CallProc, ProcAddr = FirstProc....  ');
  45.   CallProc(i, 7, 'irgendein Text');
  46.   ProcAddr := @OtherProc;  { setzt ProcAddr auf OtherProc }
  47.   Writeln('Aufruf von CallProc, ProcAddr = OtherProc....  ');
  48.   CallProc(i, 5, 'noch mehr Text');
  49. end.
  50.