Accueil du site > Les articles > Utilisation de pointeurs pour transmettre des paramètres en RPG
Version à imprimer Enregistrer au format PDF

Utilisation de pointeurs pour transmettre des paramètres en RPG

Modifier une chaine de caractère dans une procédure en transmettant un pointeur

mardi 6 septembre 2005, par Serge Gomes Visites  1985 |Popularité : 22% 

Exemple, le plus simple possible, pour transmettre des paramètres en utilisant des pointeurs.
- La procédure principale transmet à la procédure PtrPass un pointeur (pointant sur la chaine Str1)
- La procédure PtrPass modifie Str2 qui est "basée" sur le pointeur reçu en paramètre.
- Str1 & Str2 partage donc la même adresse toute les modification sur Str2, pourtant inconnu de la procédure principale, affecte Str1.

* Prototype                                                                     
D PtrPass         PR                                                         
D                                 *   value                                      
 * --------------------------   
 * Variable de travail                                                 
D Ptr_Str1        s               *   inz(%addr(Str1))             
D Str1            s          65535    varying                           
 * --------------------------   
 * Main                                                                           
C                   eval      Str1=’Voici le texte non encadré
C*                  eval      Ptr_Str1 = %addr(Str1)        
C                   CallP     PtrPass(Ptr_Str1)                        
 * Str1 est maintenant modifié                                       
C                   Eval      *INLR = *ON                             
 * ---------------------------   
 * Procedure PtrPass            
P PtrPass         B                                                            
D                 PI                                                                
D Ptr_Ch                          *   value                                
 * ------------------------   
 * Variables de travail             
 * -------------------------   
D  Str2           s          65535    varying                           
D                                     based(Ptr_Ch)                        
 * -------------------------   
 * On encadre la chaine < ------  >                                 
C                   eval      Str2 = %TRIM(’<’+ Str2 + ’>’)  
C                   return                                                        
P                 E                                                                 
 * -----------------------