我正忙于IBM i上的C ++项目,并且正在尝试调用服务程序中的RPG程序,但我不知道该怎么做。
我只在互联网上找到示例,documentation显示如何调用RPG程序(* PGM)对象,方法如下:
extern "OS"
{
void RPGPROGRAM(void);
}
int main()
{
RPGPROGRAM();
return 0;
}
文档说他们正在调用RPG"程序"但是如果你看一下实际的源代码,它只是一个RPG程序(* PGM)对象,他们使用#pragma map
在C ++中调用。
假设我有以下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 ++程序,但这也不起作用。
对此有任何帮助将不胜感激。
答案 0 :(得分:1)
首先使用哪个C ++编译器?
原生ILE一个?那应该很容易。很确定你只需要:
关于函数声明的extern "RPG"
。
或PASE中的AIX?然后看看Calling ILE procedures
有一点需要注意,RPGLE不区分大小写,默认情况下,大写名称。虽然C / C ++区分大小写。您的C ++程序需要调用RPG_DOSOMETHING
,或者您需要使用EXTPROC('rpg_DoSomething')