我写了一个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阵列变量吗?
我很难描述这个问题,因此我为我的英语不好而感到抱歉。
答案 0 :(得分:0)
您是否有WD20001JR
的原型以及$INPUT_JAVA
和$OUTPUT_JAVA
的D规格?由于参数是通过引用传递的,因此如果这些字段的大小与被调用程序WD20001JR
期望的大小不匹配,则可能无意中覆盖了数组字段。