Ibm midrange 如何将数组数据结构作为参数传递?
我试图将数组DS作为参数传递,但编译时出现“RNF5343数组有太多省略索引”错误 在两个程序中,数组数据结构的定义与Ibm midrange 如何将数组数据结构作为参数传递?,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我试图将数组DS作为参数传递,但编译时出现“RNF5343数组有太多省略索引”错误 在两个程序中,数组数据结构的定义与 D ResponseData DS Dim(100) Qualified D Field1 3 0 D Field2 26 ... D Field45 26 被调用程序“PGM1”的
D ResponseData DS Dim(100) Qualified
D Field1 3 0
D Field2 26
...
D Field45 26
被调用程序“PGM1”的简单定义
调用程序“PGM2”的简单定义
编译调用程序“PGM2”时,RNF5343数组中省略的索引过多。我不想只传递数组的一个实例,而是传递整个数组
我应该怎么做才能在两个程序之间传递数组数据结构作为参数?我认为您的示例中有一些输入错误……可能是在实际代码中 以下(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
我认为您的示例中有一些拼写错误…可能是在实际代码中 以下(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
如果您确实在PGM1中定义了PGM1原型,在PGM2中定义了PGM1原型的另一个定义,那么我建议您将带有EXTPGM关键字的原型移动到一个复制文件中,并将其复制到PGM1和PGM2中。拥有两个独立的原型会破坏编译器确保正确传递参数的能力。更改程序本身中的原型太容易了,而忘记更改调用者中的所有原型。如果您确实在PGM1中定义了PGM1原型,并且在PGM2中定义了PGM1原型的另一个定义,那么我建议您将带有EXTPGM关键字的原型移动到一个复制文件中,并将其复制到PGM1和PGM2中。拥有两个独立的原型会破坏编译器确保正确传递参数的能力。更改程序本身中的原型太容易了,而忘记更改调用者中的所有原型