2016-10-04 40 views
1

我想從CLLE調用RPGLE過程。由於RPGLE過程存在,我不能將其更改爲extproc(* CL)類型。我目前在V7R1。我已經使用了下面的代碼。如果我通過* BYVAL參數沒有通過。如果我通過* BYREF它正在工作。我已經在RPGLE服務中將參數定義爲CONST。請讓我知道,如果我必須做任何額外的更改通過價值傳遞。* BYVAL和* BYREF CLLE

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過程中編碼爲CONST,那麼您根本無法按值傳遞。

RPGLE端的參數需要VALUE關鍵字爲值傳遞值parm。 CONST表示通過只讀引用傳遞。在RPGLE中既沒有指定CONST也沒有指定VALUE,則parm通過引用傳遞。

你真的應該添加EXTPROC(* CL)。 RPGLE和CL不會以相同的方式返回1個字節的值;也不以相同的方式傳遞值1字節的變量。在v6r1之前,您可以編寫一個臨時的2字節變量來保存返回值,然後僅將第一個字節複製到IS_VLD。

+0

我總是覺得CONST等於按價值傳遞。所以CONST是通過引用傳遞的,但是隻讀引用。謝謝你的回答 – Sekar

+0

正確。 'CONST'和'VALUE'都允許你傳遞文字......'callp myproc('Hi');'但他們使用不同的機制來這樣做。 – Charles