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

Mor*_*ier 1 rpgle ibm-midrange

我有许多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)
Run Code Online (Sandbox Code Playgroud)

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

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

jma*_*phy 7

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