CALLP 也是动态调用还是在 ILE RPG 中可视为静态调用

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...