我正试着从RPGLE打电话给CL程序员。我以前没这么做过。我一直在做oposit (从CL调用一个rpgle ),这是可能的吗?通过调用或QCMDEXC?
发布于 2020-10-21 00:18:34
你可以从RPGLE调用任何程序,就像你调用QCMDEXC一样,你必须用extpgm关键字定义一个原型,并像过程一样使用它
dcl-pr name_inside_rpgle extpgm('*LIBL/CLPGMNAME'); // program name MUST be uppercased
...
end-pr;
name_inside_rpgle(...);发布于 2020-10-27 04:45:25
CALLP和QCMDEXEC做的是两件截然不同的事情。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进行调用。
https://stackoverflow.com/questions/64448960
复制相似问题