gpt4 book ai didi

rpgle - 在原型(prototype)和过程接口(interface)之间共享定义

转载 作者:行者123 更新时间:2023-12-01 09:26:52 25 4
gpt4 key购买 nike

我开始使用 RPGLE,我正在尝试确定是否有任何方法可以只为我的服务程序中的过程定义一次参数。我知道我可以将原型(prototype)放在一个副本成员中(我已经这样做了),但是我仍然必须将基本相同的代码放入过程的主体(“过程接口(interface)”)中。

我的问题是,有没有办法使用原型(prototype)来定义程序接口(interface)中的参数(反之亦然)?

理想情况下,类似于:

原型(prototype):

D buildForm        PR
D formType 10A CONST
D mode 4A CONST

程序:

P buildForm        B
D buildForm PI
D formType LIKE(formType)
D mode LIKE(mode)

嗯,理想情况下我只能说“使用原型(prototype)”或程序主体中的某些内容,否则编译器会自己找到它...


我是否误解了如何设置原型(prototype)和过程接口(interface),或者如果正确完成它们实际上是重复的:

原型(prototype):

D buildForm        PR
D formType 10A CONST
D mode 4A CONST

程序:

P buildForm        B
D buildForm PI
D formType 10A CONST
D mode 4A CONST

感谢阅读。

最佳答案

在 7.1 中,如果您在使用它的同一程序中定义子过程,则不需要原型(prototype)。如果您正在使用来自服务程序或绑定(bind)模块的子过程,则仅需要原型(prototype)(不要将模块绑定(bind)到程序!)

我个人并不觉得创建原型(prototype)很麻烦。我复制 PI,将其更改为 PR,将其放入/copy 成员中并在许多程序中使用它:

  /copy buck/qprotosrc,buildform
...
buildform(form: mode);

我需要“双重定义”的唯一时间是在 PI 所在的服务程序中。避免大多数情况的一种方法是使用条件编译。这是一个例子:

qprotosrc(buildform)

  // Build form prototype and start of interface
// Service program will complete the interface with P E
/if not defined(buildform_proto)
/define buildform_proto
D buildForm PR
/else
P buildForm B
D buildForm PI
/endif
D formType 10A CONST
D mode 4A CONST

qrpglesrc(mysrvpgm)

  /copy buck/qprotosrc,buildform
...
/copy buck/qprotosrc,buildform
// body of buildform here
...
return;
p e

第一次处理/copy 时,它会插入原型(prototype) - 这就是您想要的所有消费者程序的内容。作为处理的一部分,它定义了 buildform_proto。在您的服务程序中,您将放置第二个/copy。因为定义了 buildform_proto,编译器会插入 P...B 和 D...PI 规范。您必须提供程序主体和 P...E 规范。

关于rpgle - 在原型(prototype)和过程接口(interface)之间共享定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21893757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com