2017-01-25 6 views
0

私はパラメータとして配列DSを渡そうとしていますが、コンパイルすると "RNF5343配列のインデックスが多すぎます"というエラーが出ます。配列データ構造体をパラメータとして渡すにはどうすればよいですか?

配列は、 "PGM1" と呼ばれるプログラムの

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
    ... 
D Field45      26 

シンプルな定義プログラム "PGM2"

D PGM2   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

PGM1(RecieveVar: RecieveCount); 
を呼び出すの

D PGM1   PI 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

D PGM1   PR 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

... 
Multiple row fetch using embedded SQL into RecieveVar 
... 

シンプルな定義として、両方のプログラムで同じに定義されています

呼び出し元プログラム "PGM2"をコンパイルすると、RNF5343配列の数が多すぎますインデックスが発生します。配列のインスタンスを1つだけ渡すだけではなく、すべてのインスタンスを渡す必要があります。

2つのプログラム間でパラメータとして配列データ構造を渡すにはどうすればよいですか?

答えて

0

実際のコードでは、あなたの例にいくつかのタイプミスがあると思います。

次(PGM2)は私のために罰金コンパイル:あなたは本当にPGM1で定義されたPGM1のプロトタイプを持っているとした場合

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData DS     Dim(100) Qualified 
D Field1      3 0 
D Field2      26 
D Field45      26 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(ResponseData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE   

けど、私はTEMPLATEキーワード

H option(*nodebugio) debug(*INPUT) cvtopt(*datetime) 

D ResponseData_t DS     template 
D Field1      3 0 
D Field2      26 
D Field45      26 

d myData   ds     likeds(ResponseData_t) dim(100) 

D PGM1   PR     ExtPgm('PGM1') 
D ReceiveVar       LikeDS(ResponseData_t) Dim(100) 
D ReceiveCount     10U 0 Const 

    /FREE 

    pgm1(myData:10); 

    *INLR=*ON; 
    return; 
    /END-FREE  
1

を利用することをお勧めしたいですPGM2のPGM1プロトタイプのもう1つの定義は、EXTPGMキーワードを含むプロトタイプをコピーファイルに移動し、PGM1とPGM2の両方にコピーすることをお勧めします。 2つの別々のプロトタイプを持つことは、パラメータが正しく渡されることを確実にするコンパイラの能力に反する。プログラム自体のプロトタイプを変更して、呼び出し元のプロトタイプをすべて変更するのは忘れてしまいます。

関連する問題