IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

Même nom de procédure dans deux programmes de service


Sujet :

AS/400

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Même nom de procédure dans deux programmes de service
    Bonjour,

    J'ai 2 programmes de service, un dédié aux Utilisateurs avec des procédures du style GetLanguage, GetMail, etc.. et un autre dédié aux clients dont une des procédures à le même nom : GetLanguage.
    Comment puis-je utiliser ces 2 procédures dans le même PGM Rpgle ?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    J'ai pas trés bien compris mais je vais creuser.
    Merci pour votre réponse

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Dans l'exemple ci-dessous prInterface() appelle soit la procédure prMass, soit la procédure prConn. Effectivement je ne crois pas que ce cas t'arrange.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dptr                   s             * procptr
    dprInterface        pr              extproc(Ptr)
    d p_parm                        10
    
        ptr=%paddr(prMass);
        prInterface(Massdata);
        ptr=%paddr(prConn);
        prInterface(ConnData);

    Selon tes dires, tu as deux procédures différentes portant le même nom, AYANT LA MEME INTERFACE, mais étant dans deux programmes de services différents.
    Il est possible grâce au programme ci-dessous, de le faire par indirection.
    http://reocities.com/SiliconValley/p...getspgmptr.txt

    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    H option(*srcstmt : *nodebugio)                                  
    H truncnbr(*no) decedit(',')                                     
    ** --------------------------------------------------------------
    ** Paramètres du programme                                       
    ** --------------------------------------------------------------
    d $entry          pr                  extpgm('INDIRECT')         
    d                               10A                              
    d $entry          pi                                             
    d  Prog                         10A                              
    ** ----------------------------------------------------          
    ** Prototype d'appel à une procédure générique                   
    **    dont on ne connaît pas le nom au moment                    
    **    de la compilation mais qui aura un                         
    **    prototype d'appel identique                                
    ** ----------------------------------------------------          
    DProcGenerique    PR            50A   ExtProc(Ptr)               
    D                               30A   Value              
                                                             
    ** ----------------------------------------------------  
    ** Prototype de récupération du Pointeur                 
    ** ----------------------------------------------------  
     *  Get Service Program Pointer                          
     *                                                       
    D GetSPgmPtr      PR              *   ProcPtr            
    D   SrvPgm                      10A   Const              
    D   Library                     10A   Const              
    D   Procedure                  100A   Const      Varying 
    ** ----------------------------------------------------  
    D DS_GetSPgmPtr   ds                                     
    D   SrvPgm                      10A   inz('INDIRECTX')   
    D   Library                     10A   inz('*LIBL')       
    D   Procedure                  100A   Varying            
    D  Ptr                            *   ProcPtr                     
    ** ---------------------------------------------------------------
    ** Déclaratives diverses                                          
    ** ---------------------------------------------------------------
    D CodeRetour      s             50A                               
    ** ***************************************************************
    ** ****                  TRAITEMENT PRINCIPAL                     
    ** ***************************************************************
     /free                                                            
        *inlr = *on;                                                  
        Clear DS_GetSPgmPtr;                                          
        Reset DS_GetSPgmPtr;                                          
        Procedure = 'INDIRECT1';                                      
        Ptr = GetSPgmPtr(SrvPgm:Library:Procedure);                   
        CodeRetour = ProcGenerique('Parametre');                      
        Dsply CodeRetour;                                             
      
        Procedure = 'INDIRECT2';                    
        Ptr = GetSPgmPtr(SrvPgm:Library:Procedure); 
        CodeRetour = ProcGenerique('Parametre');    
        Dsply CodeRetour;                           
    
    /end-free
    M'enfin, le mieux est de donner des noms différents à tes focntions.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    M'enfin, le mieux est de donner des noms différents à tes focntions.
    C'est ce que j'ai fait
    La solution me semble finalement bien plus compliquée que le problème.

    En tout cas merci pour tes reponses.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/05/2011, 11h03
  2. ping avec le nom du PC dans deux sous réseaux
    Par messahel dans le forum Windows
    Réponses: 1
    Dernier message: 09/06/2010, 15h11
  3. [z/OS] Nom du JCL dans un programme COBOL
    Par ben_lille dans le forum Cobol
    Réponses: 6
    Dernier message: 17/09/2009, 13h13
  4. [XL-2000] Donner le même nom à une cellule dans plusieurs feuilles
    Par s.echeff dans le forum Excel
    Réponses: 5
    Dernier message: 07/04/2009, 15h55
  5. Réponses: 2
    Dernier message: 25/01/2007, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo