Как исправить "не получить чистый массив после вызова программы" - PullRequest
0 голосов
/ 28 января 2019

Я написал Программу для кодирования некоторых Строк.Я пишу 2-ю Программу, чтобы вызвать этот инструмент кодирования.Здесь я создаю массив (A_FELDER) и заполняю его некоторым текстом.В следующем Point 1 вы можете увидеть мой инструмент кодирования.В Point 2 вы не можете увидеть объявление из моего массива и FOR-LOOP.И в Точка 3 вызов в Инструмент кодирования.

Прежде чем я вызову Инструмент, в моем массиве будет три набора данных.Когда инструмент кодирования успешно запущен, мой массив (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).Но после вызова программы у меня есть пустой массив.Остальные поля не пусты.Сохранить переменные массива AS400, отличные от обычных переменных?

Мне так сложно описать эту проблему, поэтому мне очень жаль моего плохого английского.

1 Ответ

0 голосов
/ 30 января 2019

У вас есть прототип для WD20001JR и D-спецификации для $INPUT_JAVA и $OUTPUT_JAVA?Поскольку параметры передаются по ссылке, вы можете непреднамеренно перезаписать поля массива, если размеры этих полей не соответствуют размерам, ожидаемым вызываемой программой WD20001JR.

...