首页 > 解决方案 > CALLP 也是动态调用还是可以被视为 ILE RPG 中的静态调用

问题描述

我有一个模块,其中包含主程序和子程序,其他脚本正在使用 EXTPGM 调用模块,但很少有脚本不使用 EXTPGM 他们正在使用 CALLP,任何人都可以帮助我了解 CALLP 是动态调用还是静态调用ILE 角色扮演游戏?

标签: ibm-midrangerpgle

解决方案


从手册:

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

编辑
分辨率不变。在第一次通话期间已解决。只要程序处于活动状态,就不会重新解决。

该规则的例外是 ifEXTPGM()与变量而不是常量一起使用;并且变量的值发生变化。

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();

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


推荐阅读