在程序调用后将垃圾值分配给CL变量

时间:2019-06-10 08:23:58

标签: ibm-midrange rpgle

我有许多CL程序,它们当前正在通过FTP将文件传输到生产服务器。

我们已经出于测试目的引入了新的iSeries测试服务器,并且这些程序需要从该新服务器上运行。但是,从测试服务器运行时的目标FTP地址应该不同。这些文件需要发送到相应的测试服务器。

为此添加了一个简单的程序调用,如下所示:

         PGM        PARM(&FTPERR)                                    

         DCL        VAR(&SUCCES) TYPE(*CHAR) LEN(1)                  
         DCL        VAR(&FTPERR) TYPE(*CHAR) LEN(1)                  
         DCL        VAR(&TARGIP) TYPE(*CHAR) LEN(20) VALUE(' ')      
         DCL        VAR(&ATTEMP) TYPE(*DEC) LEN(2 0) VALUE(0)        

         CALL       PGM(GETFTPRPG) PARM('FTPMRCL' &TARGIP)

从上面可以看到,GETFTPRPG程序是新引入的程序调用,它根据程序名称和程序运行所在的服务器检索IP地址。

这很好,但是问题在于程序中声明的其他变量(具体来说,是程序中声明的第一个十进制变量)正在更改。在上面的示例中,&ATTEMP变量的值更改为04。有人可以建议可能的原因吗?

1 个答案:

答案 0 :(得分:7)

CL通过引用传递变量。确保&TARGIP及其对应的参数定义相同。看来GETFTPRPG与CL程序定义的第二个参数不同(可能更长)。更改&TARGIP的值(超过20个字符)后,它将覆盖内存中的&ATTEMP的值。