从 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 过程
我正忙于 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')