如何解决“在编程调用后不要获得清晰的数组”

时间:2019-01-28 15:26:20

标签: arrays ibm-midrange rpgle

我写了一个Programm来编码一些字符串。我编写了第二个程序来调用此编码工具。在这里,我创建一个数组(A_FELDER)并用一些文本填充它。在下面的 Point 1 中,您可以看到我的encoding-Tool。在第2点中,您无法从我的数组和FOR-LOOP中看到声明。然后在第3点中调用encode-Tool。

在我调用工具之前,我的数组具有三个数据集。当编码工具成功运行时,我的数组(A_FELDER)为空。

我试图更改* INLR = * ON;返回。但我得到相同的结果。我也创建第二个数组,并写回该数组中的数据。结果相同,为空数组。

我在参数之后将我的编码工具更改为程序。我的数组(A_FELDER)具有三个数据集。 所以我的猜测是:java调用清除了一些存储空间,而我的数组找不到他的空间。

第1点

D Verschl         S               O   Class(*Java:'eirich.verschl.Verschl')
D $input          S           1024a                                        
D $output         S           1024a     

D new_Verschl     PR              O   EXTPROC(*JAVA:                  
D                                             'eirich.verschl.Verschl'
D                                             :*CONSTRUCTOR)           

D encrypt         PR              O   EXTPROC(*JAVA:                    
D                                             'eirich.verschl.Verschl': 
D                                             'encrypt')                
D                                     CLASS  (*JAVA:'java.lang.String') 
D  arg0                           O   CLASS  (*JAVA:'java.lang.String') 

C     *entry        plist                                     
C                   parm                    $input            
C                   parm                    $output           

/Free
//Generate new Object named Verschl              
Verschl     = new_Verschl();                   

//Trim and create Java String from input Parm    
fldjString  = makestring(%trimr($input));      

// ENCRYPT java String                           
fldjString2 = encrypt(Verschl:fldjString);     

//Convert jString in Alpha                       
fldBty      = cvtToBytes(fldjString2);         

//return value for call pgm                      
$output     = fldBty;

第2点

D*                                            
D A_FELDER        S            256A   DIM(20) 
D* 

C                   EVAL      A_FELDER(1) = KOFIRM     
C                   EVAL      A_FELDER(2) = HEAUNR     
C                   EVAL      A_FELDER(3) = KOAUNR 
C*
C                   FOR       COUNT = 1 TO %ELEM(A_FELDER)     
C*                                                             
C                   IF        A_FELDER(COUNT) <> *BLANKS       
C*                                                             
C                   EVAL      I_UNVERSCHL_J = A_FELDER(COUNT)  
C                   EXSR      DATAENCRYPT                      
C                   EVAL      A_FELDER(COUNT) = I_VERSCHL      
C*                                                             
C                   ENDIF                                      
C*                                                             
C                   ENDFOR     

第3点

C     DATAENCRYPT   BEGSR                                    
C*                                                           
C                   EVAL      $INPUT_JAVA  = I_UNVERSCHL_J   
C                   EVAL      $OUTPUT_JAVA = ''              
C*                                                           
C                   CALL(E)   'WD20001JR'                    
C                   PARM                    $INPUT_JAVA      
C                   PARM                    $OUTPUT_JAVA     
C*                                                           
C                   EVAL      I_VERSCHL    = $OUTPUT_JAVA  
C*                                                           
C                   ENDSR 

所以我想加密我的字符串,而不是回写在此数组(A_FELDER)中。但是在Programm Call之后,我有一个空数组。其他字段不为空。 保存与普通变量不同的AS400阵列变量吗?

我很难描述这个问题,因此我为我的英语不好而感到抱歉。

1 个答案:

答案 0 :(得分:0)

您是否有WD20001JR的原型以及$INPUT_JAVA$OUTPUT_JAVA的D规格?由于参数是通过引用传递的,因此如果这些字段的大小与被调用程序WD20001JR期望的大小不匹配,则可能无意中覆盖了数组字段。