2016-10-04 11 views
1

CLLEからRPGLEプロシージャをコールしようとしています。 RPGLEプロシージャーが存在するので、extproc(* CL)タイプに変更することはできません。私は現在V7R1にいる。私は以下のコードを使用しています。 * BYVALを渡すと、パラメータが渡されません。もし私が* BYREFを渡すなら、それは働いています。 RPGLEサービスでCONSTというパラメータを定義しました。私が値渡しに追加の変更を加えなければならないかどうか教えてください。* CLLEのBYVALと* BYREF

PGM              

DCLPRCOPT USRPRF(*OWNER) DFTACTGRP(*NO) ACTGRP(*NEW) + 
      BNDDIR(SAMSRV)        

DCL  VAR(&CLNBR) TYPE(*CHAR) LEN(9)     
DCL  VAR(&USER) TYPE(*CHAR) LEN(10)     
DCL  VAR(&IS_VLD) TYPE(*LGL)      

CHGVAR  VAR(&CLNBR) VALUE('01112201T')     
CHGVAR  VAR(&USER) VALUE('UUUUU ')     

CALLPRC PRC('IsValidClient') PARM((&CLNBR *BYREF) + 
      (&USER *BYREF)) RTNVAL(&IS_VLD)    
ENDPGM  

答えて

1

RPGLEプロシージャでparmsがCONSTとコード化されている場合、単純に値渡しできません。

RPGLE側のパラメータには、値渡しのパラメータであるVALUEキーワードが必要です。 CONSTは、読み取り専用の参照渡しを意味します。 RPGLEにCONSTVALUEも指定されていない場合、parmは参照渡しされます。

本当にEXTPROC(* CL)を追加する必要があります。 RPGLEとCLは全く同じ方法で1バイト値を返しません。同様に値の1バイト変数を渡すこともありません。 v6r1より前には、返された値を保持するために一時的な2バイト変数をコード化してから、最初のバイトを& IS_VLDにコピーするだけでした。

+0

私はいつもCONSTが値渡しに等しいという印象を受けました。したがって、CONSTは参照渡しですが、読み取り専用の参照です。答えは – Sekar

+0

ありがとうございます。 'CONST'と' VALUE'は両方ともリテラルを渡すことができます... 'callp myproc( 'Hi');'しかし、彼らはそうするために異なるメカニズムを使います。 – Charles

関連する問題