从RPGLE程序问题调用CL程序

问题描述

我正在尝试从RPGLE调用CL程序。 我以前没做过我总是做过对立(从CL调用rpgle) 可能吗 ?通过callp或QCMDEXC ???

解决方法

您可以像调用QCMDEXC一样从RPGLE调用任何程序,您必须使用extpgm关键字定义原型并像过程一样使用它

dcl-pr name_inside_rpgle extpgm('*LIBL/CLPGMNAME'); // program name MUST be uppercased 
  ...
end-pr;

name_inside_rpgle(...);
,

CALLPQCMDEXEC做两件非常不同的事情。 CALLP用于执行程序对象(* PGM)和ILE子过程(无对象类型,但包含在* SRVPGM甚至是* PGM中),无论使用哪种语言来编译* PGM(或* SRVPGM)目的。 QCMDEXEC用于执行命令对象(* CMD)。

让我们看一下* PGM对象。这是由RPG,COBOL,C / C ++,CL,PL / 1或MI编译器/汇编器之一创建的已编译对象。只要正确定义了调用,所有程序对象都可以用这些语言中的任何一种来调用。对于RPGLE,您可以使用CALL或CALLP,但首选CALLP,因为它可以执行参数类型检查。

查看子过程,这些过程包含在ILE程序和服务程序(* PGM和* SRVPGM)对象中。可以使用RPG,COBOL,CL或C / C ++ ILE编译器之一来创建它们,并且可以从任何ILE程序中调用它们,而不论使用哪种语言创建。实际上,一个服务程序可以包含多种语言的子过程。在RPGLE中,使用CALLB或CALLP调用子过程,但首选CALLP,因为与在调用程序对象中一样,它执行参数类型检查。需要注意的是,如果子过程驻留在程序对象(* PGM)中,则只能从该程序对象中调用它。共享子过程必须编译到服务程序中。共享是一种共享子过程源的共享类型,然后将模块直接链接到程序对象中。我不真正考虑共享代码,因为仅共享源,而不共享可执行文件。

这使我们想到了命令对象(* CMD)这些是CRTCMD创建的特殊对象。只需输入诸如WRKACTJOB之类的命令名称,即可在命令行上执行命令。它们可能有参数,也可能没有。这些是由QCMDEXEC执行的事物,顺便说一下,它们是程序对象,因此可以在RPGLE程序中使用CALLP进行调用。

相关问答

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