1

我正在编写一组程序来创建、编写和编译一组 SQLRPGLE 程序。我的程序开头的很多代码在我拥有的每个程序中都重复了,所以我把它放到参考源中是有意义的......它大致的形式

    H some h specs
    D a load of d specs

    /free
       my nice free formatted code that I use everywhere

然后我的元程序出现并添加了很多代码。此时我的程序看起来像这样

    /copy *libl/qrpgleref,myRefPgm

      lots of nice rpg and sql

    /end-free

当我编译它时它不起作用 - 我认为这是因为程序无法正确匹配 /free 和 /end-free ......对吗?还是我在这里错过了一些更微妙的东西?

干杯

4

3 回答 3

4

我认为您的程序没有编译的原因,仅基于您问题中提供的示例,是因为您将 H 和 D 规范与您的自由格式计算规范混合在一起。顺序对 RPG 来说很重要,你不能乱来。如果您复制的代码需要 D 和 H 规范,那么您有两种选择:

  • 为 H、D 和 C(自由格式)规范创建单独的 /copy 源成员。然后/将它们复制到您的 RPG 程序中的正确位置。
  • 创建一个 *MODULE 或 *SRVPGM,然后只将原型的 D 规范复制到您的 RPG 程序中。仅基于您在问题中提出的内容,我认为最好的解决方案是创建一个服务程序。为了更容易将服务程序绑定到 RPG 程序,我喜欢创建一个绑定目录,然后在我的 RPG 程序中放置一个 H 规范:H BNDDIR( library/bnddir )。这样,我仍然可以在 PDM 中使用正常的 14 进行编译。
于 2012-06-08T12:47:42.853 回答
2

我认为你可以,但为什么不添加/freeand/end-free以防将来出现混乱或问题?

于 2012-06-06T13:06:08.470 回答
2

根据 IBM ILE RPGLE 语言参考 (SC09-2508-08)

/COPY 或 /INCLUDE 指令包含的任何语句都被视为固定语法计算。/COPY 成员中的任何自由格式语句必须由/FREE 和/END-FREE指令分隔。

另请注意:

当您指定 /END-FREE 时,自由格式计算块结束。

我的建议是尽可能避免使用 /copybooks。

于 2012-06-22T09:29:09.860 回答