在 RPG ILE Free 中使用外部描述的数据结构

Using externally described data structures in RPG ILE Free

我在 RPG ILE Free 中使用外部描述的数据结构时遇到了很多问题。
最简单的问题似乎就是声明结构。

DCL-DS PALWGHT extname(SCN102DS);
  PW DIM(20) OVERLAY(PALWGHT:1); 
END-DS;

当我编译时,它说外部文件不存在...但它存在并且在我的库列表中。

 A          R PALWGHT
 A            P01WGHT       11S 3
 A            P02WGHT       11S 3
 A            P03WGHT       11S 3
 A            P04WGHT       11S 3
 A            P05WGHT       11S 3
 A            P06WGHT       11S 3
 A            P07WGHT       11S 3
 A            P08WGHT       11S 3
 A            P09WGHT       11S 3
 A            P10WGHT       11S 3
 A            P11WGHT       11S 3
 A            P12WGHT       11S 3
 A            P13WGHT       11S 3
 A            P14WGHT       11S 3
 A            P15WGHT       11S 3
 A            P16WGHT       11S 3
 A            P17WGHT       11S 3
 A            P18WGHT       11S 3
 A            P19WGHT       11S 3
 A            P20WGHT       11S 3

这在将其更改为自由格式之前有效.....

 DPALWGHT        E DS                  EXTNAME(SCN102DS)
 DPW                             11s 3 DIM(20) OVERLAY(PALWGHT:1)

我迷路了。这可能真的很愚蠢....

几个问题。首先,在 free-form 中 EXTNAME(filename) 中的文件名必须是 命名常量 或字符文字。这与可以是 文件名 或字符文字的固定形式变体不同。如果您阅读所有错误消息,您会收到 RNF0202 - THE PARAMETER FOR EXTNAME OR EXTFLD MUST BE A DEFINED NAMED CONSTANT OR LITERAL. 如果您使用文件名,则必须将其括在 free-form.

中的引号中
DCL-DS PALWGHT extname('SCN102DS');

PW 仍然未定义,因为它没有类型声明。并且,在free-form中,OVERLAY()不能指向数据结构。相反,您使用 POS()。所以整个事情应该看起来像:

DCL-DS PALWGHT extname('SCN102DS');
  PW LIKE(P01WGHT) DIM(20) POS(1); 
END-DS;