Я пытаюсь вызвать процедуру RPGLE из CLLE. Поскольку процедура RPGLE существует, я не могу изменить ее на тип extproc (* CL). Я сейчас в V7R1. Я использовал приведенный ниже код. Если я передаю * BYVAL, параметры не пройдут. Если я передаю * BYREF, он работает. Я определил параметры как CONST в службе RPGLE. Пожалуйста, дайте мне знать, нужно ли мне делать какие-либо дополнительные изменения для передачи по значению.* 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
У меня всегда было впечатление, что CONST эквивалентен передаче по значению. Поэтому CONST передается по ссылке, но только для чтения. Спасибо за ответ – Sekar
Исправить. Оба 'CONST' и' VALUE' позволяют передавать литералы ... 'callp myproc ('Hi');' Но они используют разные механизмы для этого. – Charles