我试图将数组DS作为参数传递但是在编译时我得到了一个" RNF5343数组有太多的省略索引"错误。
阵列数据结构在两个程序中的定义与
相同D ResponseData DS Dim(100) Qualified
D Field1 3 0
D Field2 26
...
D Field45 26
被叫程序的简单定义" PGM1"
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);
编译调用程序" PGM2" RNF5343阵列发生了太多的省略索引。我不想只传递一个数组实例,而是整个事情。
如何才能将数组数据结构作为参数传递给两个程序?
答案 0 :(得分:2)
如果您确实在PGM1中定义了PGM1原型,并在PGM2中定义了PGM1原型,那么我建议您将带有EXTPGM关键字的原型移动到复制文件中,并将其复制到PGM1和PGM2中。具有两个单独的原型会使编译器无法确保正确传递参数。在程序本身更改原型并且忘记更改调用者中的所有原型是太容易了。
答案 1 :(得分: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
虽然我建议使用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