调用传递数组的外部程序时如何使用LIKE关键字

Ben*_*ill 2 rpgle ibm-midrange

我有以下RPGLE程序:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                              like(myarr)
d  somevar                            like(somevar)

d myarr           s             64a   dim(100)
d somevar         s             65a

/free
 callp mypgm(myarr: somevar);
 *inlr = *on;
/end-free
Run Code Online (Sandbox Code Playgroud)

当我尝试在V6R1盒子上编译它时,我收到错误消息:

RNF5343 30      1 Array has too many omitted indexes; specification is ignored.
Run Code Online (Sandbox Code Playgroud)

一些文档告诉我:

RNF5343

数组有太多省略的索引; 规范被忽略了.

三十

原因.....:在赋值运算符右侧用作操作数的数组的省略索引数大于指定为赋值结果的数组的省略索引数.

恢复...:减少操作数的省略索引数; 或者增加结果的省略索引数.再次编译.

这不是很有用,因为这是一个程序调用,而不是尝试分配一个值(比如EVAL语句或其他东西).

如果我将外部程序调用的声明更改为:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                        64a   dim(100)
d  somevar                            like(somevar)
Run Code Online (Sandbox Code Playgroud)

该程序将编译得很好.

那么如何将LIKE关键字与数组一起用于外部程序定义?

Buc*_*bro 5

LIKE仅继承数据类型,长度,数据类型和CCSID.要传递数组,请同时使用LIKE和DIM:

dmypgm            pr                  extpgm('MYPGM')
d  myarr                              like(myarr) dim(%elem(myarr))
d  somevar                            like(somevar)

d myarr           s             64a   dim(100)
d somevar         s             65a
Run Code Online (Sandbox Code Playgroud)

请参阅6.1 Infocenter LIKE()关键字.