Ibm midrange 如何将数组数据结构作为参数传递?

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”的

我试图将数组DS作为参数传递,但编译时出现“RNF5343数组有太多省略索引”错误

在两个程序中,数组数据结构的定义与

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中。拥有两个独立的原型会破坏编译器确保正确传递参数的能力。更改程序本身中的原型太容易了,而忘记更改调用者中的所有原型