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

Jef*_*eff 0 rpgle

我在RPG ILE Free中使用外部描述的数据结构时遇到了一些问题.
最简单的问题似乎只是宣告结构.

DCL-DS PALWGHT extname(SCN102DS);
  PW DIM(20) OVERLAY(PALWGHT:1); 
END-DS;
Run Code Online (Sandbox Code Playgroud)

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

 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
Run Code Online (Sandbox Code Playgroud)

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

 DPALWGHT        E DS                  EXTNAME(SCN102DS)
 DPW                             11s 3 DIM(20) OVERLAY(PALWGHT:1)
Run Code Online (Sandbox Code Playgroud)

我迷路了.这可能是非常愚蠢的......

jma*_*phy 6

几个问题.首先,在自由格式中,文件名EXTNAME(filename)必须是命名常量或字符文字.这与固定形式变体不同,后者可以是文件名或字符文字.如果您阅读了所有错误消息RNF0202 - THE PARAMETER FOR EXTNAME OR EXTFLD MUST BE A DEFINED NAMED CONSTANT OR LITERAL.如果使用文件名,则必须用自由格式的引号括起来.

DCL-DS PALWGHT extname('SCN102DS');
Run Code Online (Sandbox Code Playgroud)

PW仍然是未定义的,因为它没有类型声明.并且,在自由形式中,OVERLAY()不能指向数据结构.相反,你使用POS().所以整个事情应该是这样的:

DCL-DS PALWGHT extname('SCN102DS');
  PW LIKE(P01WGHT) DIM(20) POS(1); 
END-DS;
Run Code Online (Sandbox Code Playgroud)