2017-01-25 78 views
0

我想传递一个数组DS作为参数,但编译时,我得到一个“RNF5343数组有太多省略索引”错误。如何传递数组数据结构作为参数?

的阵列作为

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”

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

PGM1(RecieveVar: RecieveCount); 
的简单定义名为 “PGM1” 的

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

简单的定义来定义相同的两个程序

编译调用程序“PGM2”时,RNF5343阵列中省略了太多索引发生。我不想仅传递数组的一个实例,而是传递整个事件。

我应该怎么做才能在两个程序之间传递数组数据结构作为参数?

回答

0

我认为你的例子中有一些错别字......可能在你的实际代码中。

以下(PGM2)对我来说编译罚款:

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   

虽然我会建议利用模板关键字

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

的如果你真的有在PGM1定义的PGM1和原型PGM2中PGM1原型的另一个定义,那么我建议您将带有EXTPGM关键字的原型移动到一个副本文件中,并将其复制到PGM1和PGM2中。有两个独立的原型会破坏编译器确保参数正确传递的能力。在程序中更改原型太容易了,并忘记更改调用者中的所有原型。