Zitat Zitat von Fuerchau
Also Datenstrukturen als Returnwert geht zwar schon (ist dann vom Typ Zeichen) aber nicht unbedingt sinnvoll, da die Schnittstelle dann nicht eindeutig ist.
Wenn eine Datenstruktur als Rückgabe-Wert definiert ist, kann sie auch als Datenstruktur empfangen werden.
In diesem Fall eine Dummy Datenstruktur an und versteckt diese in der Copy-Strecke für den Prototyp.
Der Rückgabe-Wert kann dann mit LIKEDS definiert und verwendet werden.

Beispiel:
PHP-Code:
 Copy-Strecke Prototyp
D DSQualName      DS                  based
(DummyPtr)       
D  Object                       10A                         
D  Library                      10A                         
                                                            
D GetQualName     PR                  likeDS
(DSQualName)    
D   ParmFile                    10A                         
D   ParmLib                     10A 
PHP-Code:
D MyFile          S             10A   inz('MYFILEP')         
D MyLib           S             10A                          
D DSQualFile      DS                  likeDS
(DSQualName)     
 */-----------------------------------------------------
 /
Free                                        
    DSQualFile 
GetQualName(MyFileMyLib);  
    
Dsply DSQualFile.Object;                  
    
Dsply DSQualFile.Library;                 
    *
inLR = *On;                        
 /
End-Free 
PHP-Code:
P GetQualName     B                   Export                   
D GetQualName     PI                  likeDS
(DSQualName)       
D  ParmObj                      10A                            
D  ParmLib                      10A                            
                                                               
D DSName          DS                  likeDS
(DSQualName)       
 *-------------------------------------------------------------
 /
Free                                                         
   DSName
.Object ParmObj;                                    
   If 
ParmObj    <> *Blanks;                                   
      If 
ParmLib <> *Blanks;                                   
         
DSName.Library ParmLib;                             
      else;                                                    
         
DSName.Library '*LIBL';                             
      Endif;                                                   
   EndIf;                                                      
                                                               
   Return 
DSName;                                              
                                                               
 /
End-Free                                                     
P GetQualName     E 
Ergänzung zu Dieter:
Es gibt auch noch die sogenannte Parameter-Übergabe by Constant Reference (Schlüssel-Wort CONST). Dabei wird geprüft, ob der übergebene Parameter der im Prototyp angegebenen Felddefinition entspricht. Bei Übereinstimmung wird die Adresse des Parameters an das rufende Programm oder Prozedur übergeben. Bei Abweichung wird ein temporäres Feld mit der erwarteten Definition erstellt und mit dem Paramete-Wert gefüllt. Anschliessend wird die Adresse diese neuen Feldes an das rufende Programm übergeben.

Die Parameter-Übergabe by VALUE kann zur für den Aufruf von Prozeduren verwendet werden. Für den Aufruf von Programmen ist nur eine Parameter-Übergabe by Reference möglich, auch Constant Reference.

Birgitta