Hallo,

wobei bei dieser Variante für die %PADDR BIF ein Literal verwendet werden muss und die entsprechenden Prozeduren zur Compile Time gebunden werden.
Eleganter geht das, wenn man sich die Procedure Pointer per API holt, dann braucht man zur Laufzeit nur den Namen der Prozedur, den Namen des Serviceprogramms und einen passenden Prototyp wie im obigen Beispiel.
Ein ServiceProgramm, das per API zur Laufzeit bindet ist auf meiner Open Source Seite zu finden.
Weiter Vorteile des dynamischen Bindens zur Laufzeit sind, dass man erst bindet, wenn die Prozedur das erste mal benötigt wird und man kann auch nach einem RCLACTGRP ohne Probleme erneut Binden.


mfg

Dieter Bender


Zitat Zitat von B.Hauser
Hallo Robi,

wie sieht den Dein Prototyp aus?

In dem folgenden Beispiel gibt es 3 Prozeduren (Wochentag auf Deutsch, Englisch, Französisch). Jede dieser Prozeduren hat einen eigenen Prototypen.

Um diese Prozeduren variabel aufrufen zu können, musst Du einen zusätzlichen Prototypen generieren mit dem Schlüssel-Wort ExtProc und einer Variablen für den Procedure Pointer.

Der Aufruf erfolgt dann mit diesem Prototypen.

PHP-Code:
D DayWeekPP       PR            10A   varying extproc(MyProcPtr)
D  DayNum                        3U 0 const 
Der Aufruf sieht dann wie folgt aus:
PHP-Code:
D MyProcPtr       S               *   ProcPtr  
D DayDeutsch      C                   
%PAddr('DAYWEEKD'
 *---------------------------------------------------------
 /
Free
   Select
;                                    
   
when MyFld 'F';               
        
MyProcPtr = %PAddr('DAYWEEKF');        
   
when MyFld 'E';               
        
MyProcPtr = %PAddr('DAYWEEKE');
   
other;               
        
MyProcPtr DayDeutsch;
   
EndSL;

   
Ergebnis DayWeekPP(MyParm); 
 /
End-Free 
Birgitta