问题描述
我有一个包含主程序和子程序的模块,其他脚本使用 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 中的 CALL
操作码的工作方式相同。