首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >* CLLE中的BYVAL和*BYREF

* CLLE中的BYVAL和*BYREF
EN

Stack Overflow用户
提问于 2016-10-04 19:17:55
回答 1查看 488关注 0票数 1

我试图从CLLE调用RPGLE过程。因为RPGLE过程是存在的,所以我不能将它更改为extproc(*CL)类型。我现在在V7R1。我使用了下面的代码。如果我经过*BYVAL,参数将不会被传递。如果我经过*BYREF,它正在工作。我已经将参数定义为RPGLE服务中的CONST。请让我知道,如果我必须做任何额外的改变,以传递的价值。

代码语言:javascript
复制
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    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 21:08:24

如果在RPGLE过程中将parms编码为CONST,那么您就不能通过值传递。

RPGLE端的参数需要VALUE关键字才能按值parm传递。CONST的意思是通过只读引用传递.如果没有在RPGLE中指定CONSTVALUE,则通过引用传递parm。

您确实应该添加EXTPROC(*CL)。RPGLE和CL不以完全相同的方式返回1字节值,也不以相同的方式传递值1字节变量。在v6r1之前,您可以编写一个临时的2字节变量来保存返回的值,然后将第一个字节复制到&IS_VLD。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39860108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档