Ibm midrange CALLP在ILE RPG中也是动态调用还是静态调用

Ibm midrange CALLP在ILE RPG中也是动态调用还是静态调用,ibm-midrange,rpgle,Ibm Midrange,Rpgle,我有一个模块,其中包含主过程和子过程,其他脚本使用EXTPGM调用模块,但很少有脚本不使用EXTPGM。他们使用CALLP,有人能帮助我理解CALLP在ILE RPG中是动态调用还是静态调用吗?手册: 如果在原型上指定了关键字EXTPGM,则调用将是 动态外部调用;否则它将是绑定过程调用 编辑 决心不会改变。在第一次通话中就解决了。只要程序处于活动状态,就不会重新解析 该规则的例外情况是EXTPGM()与变量而不是常量一起使用;变量的值也会改变 dcl-s pgmToCall varchar(2

我有一个模块,其中包含主过程和子过程,其他脚本使用EXTPGM调用模块,但很少有脚本不使用EXTPGM。他们使用CALLP,有人能帮助我理解CALLP在ILE RPG中是动态调用还是静态调用吗?

手册:

如果在原型上指定了关键字EXTPGM,则调用将是 动态外部调用;否则它将是绑定过程调用

编辑
决心不会改变。在第一次通话中就解决了。只要程序处于活动状态,就不会重新解析

该规则的例外情况是
EXTPGM()
与变量而不是常量一起使用;变量的值也会改变

dcl-s pgmToCall varchar(21);
dcl-pr Mypgm extpgm(pgmToCall);
end-pr;

//SOMEPGM will be resolved twice
//  assuming the library list hasn't change
//  both will resolve to the same *PGM
pgmToCall = 'SOMEPGM';
Mypgm();
pgmToCall = '*LIBL/SOMEPGM';
Mypgm();

请注意,这并不是什么新鲜事。RPGIII和RPGIV中的
调用
操作代码的工作方式相同。

想不出使用CALLP的好理由。我将把CALLP语句转换为PR定义的过程调用。“我只是想看看它破坏了什么。”罗克博罗说,这句话毫无意义。CALLP是CALLP,用于从固定格式的RPG代码调用过程。C语句。在自由格式中,通过指定过程名称来调用原型过程。在自由格式中不需要使用CALLP。我猜这个问题与固定格式代码有关。而且,将CALLP看作是动态的还是静态的会让我感到困惑。要理解CALLP,请将其视为RPG中添加的操作码,以支持PR定义的过程或来自固定格式代码的程序调用。感谢您的慷慨帮助@Charles I还有一个与您的观点相关的问题,即当为原型指定EXTPGM时,分辨率将发挥作用吗?@mrsorrted请参阅编辑