从c++调用RPG过程

Calling RPG procedure from C++

本文关键字:过程 RPG 调用 c++      更新时间:2023-10-16

我正忙于IBM I上的一个c++项目,并试图调用服务程序中的一个RPG过程,但我不确定如何做到这一点。

我只在互联网和文档中找到示例,显示如何通过定义如下来调用RPG程序(*PGM)对象:

extern "OS"
{
    void RPGPROGRAM(void);
}
int main()
{
    RPGPROGRAM();
    return 0;
}

文档说他们调用RPG"过程",但如果你看一下实际的源代码,它只是一个RPG程序(*PGM)对象,他们从c++内部使用#pragma map调用。

假设我有以下RPG服务程序(命名为RPGSP),其中定义了一个名为rpg_doSomething的过程:

ctl-opt nomain;
dcl-proc rpg_doSomething export;
  dcl-pi *n int(10);
    dcl-parm p_test char(20);
  end-pi;
  p_test = "It Works!!";
  return 1;
end-proc;      
在我的c++程序中,我应该如何声明和调用上面的过程?

我试过在extern块内声明它,但它最终在运行时寻找rpg_doSomething对象,找不到它。我也试过在编译时将服务程序绑定到c++程序,但这也不起作用。

首先您使用的是哪个c++编译器?

本机ILE ?那就很简单了。我很确定你只需要:extern "RPG"上的函数声明。

还是PASE中的AIX ?然后看一下调用ILE过程

需要注意的一点是,RPGLE不区分大小写,默认情况下使用大写名称。而C/c++是区分大小写的。您的c++程序需要调用RPG_DOSOMETHING,或者您需要使用EXTPROC('rpg_DoSomething')

为RPG过程应用一个区分大小写的名称