从 C++ 调用 RPG 程序

Calling RPG procedure from C++

我正忙于 IBM i 上的 C++ 项目,并试图调用服务程序中的 RPG 过程,但我不确定该怎么做。

我只在 Internet 上找到示例,documentation 显示如何通过如下定义调用 RPG 程序 (*PGM) 对象:

extern "OS"
{
    void RPGPROGRAM(void);
}

int main()
{
    RPGPROGRAM();
    return 0;
}

文档说他们正在调用一个 RPG "procedure",但如果您查看实际源代码,它只是一个他们使用 #pragma map 从 C++ 中调用的 RPG 程序 (*PGM) 对象。

假设我有以下 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" 在函数声明上。

还是AIX上的PASE?那就看看Calling ILE procedures

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

将区分大小写的名称应用于 RPG 过程