1
5
这是因为程序由编译器静态绑定。所以编译器需要知道编译时调用什么程序。但是,也有一些API可以用来在运行时绑定服务程序。艾伦·坎平有一些例子 here . 让我们再谈一谈绑定。ibm i在调用程序和过程时提供两种不同类型的绑定。对于程序,绑定发生在第一次调用给定程序时的运行时,它被解析并绑定到调用方。程序名可以保存在变量中,因为程序是在运行时绑定的,所以第一次通过变量调用程序时,它将被解析并绑定到调用方,然后,当变量中的值发生更改时,程序将在下一次调用时再次解析。这称为动态绑定。绑定发生在运行时,可能是每次调用程序时,并且在调用方或激活组结束时丢失绑定。 程序在编译时静态绑定。对于过程或过程指针,没有内置运行时绑定。您可以使用过程指针来近似动态绑定,但在内部,过程绑定到过程指针,如果通过%PADRE()提供过程指针的地址,则绑定在该点发生。甚至使用回调的API也会静态绑定。API绑定到过程指针,调用方将过程指针绑定到回调过程本身,然后将绑定传递给API。在运行时没有分辨率。你可以用这个简单的程序来测试。
程序无法编译。它在绑定步骤中失败,因为它找不到
因此,rpg不提供任何在运行时(动态)绑定过程的工具,但ibm i提供了系统api,我们可以使用它手动解析服务程序中的过程。这就是我上面提到的艾伦·坎平的例子。所以从技术上说是的,我们可以动态绑定到服务程序中的过程,但是rpg不提供这样做的工具。这只发生在编译时。 |
2
2
%PADDR的参数名必须是常量,正如查尔斯和马克已经说过的。 最简单的方法是创建一个过程指针数组。 下面是一个小例子:
|
Radinator · 在RPGLE中以D规格定义原型的优势 7 年前 |
Jeff · 将参数传递给自由格式RPG线性主程序的问题 7 年前 |
ime · 在非周期程序中设置*inlr是否有任何影响? 7 年前 |
Alexandr Koshkin · RPGLE前导零仅用于非空字段 9 年前 |
user2734217 · 寻找更清晰的方式来编码这个RPG LE 11 年前 |