如何在RPGLE中使用指针调用过程
问题描述:
我在服务模块中使用回调。我想作为过程参数传递的回调函数的指针。如何在RPGLE中使用指针调用过程
我该如何在服务模块中调用我的回调函数?
psevdocode:
主代码:
dcl-pr Proc2;
ptr pointer;
end-pr;
dcl-s ptr inz(%Addr(Proc1))
Proc2(ptr);
dcl-proc Proc1;
dcl-pi *n;
parm1 char(123);
end-pi;
...
end-proc Proc1;
服务PROGRAMM
dcl-proc Proc2;
dcl-pi *n;
ptr pointer;
end-pi;
dcl-s param char(123) inz('xxxaaaqqq')
*ptr(param); // call callback
end-proc Proc2;
答
%PADDR()(获得程序地址)内置函数
PROCPTR关键字(在固定格式d - 规格)
POINTER(* PROC)(*格式d规格)
dcl-pr Proc2;
ptr pointer(*PROC);
end-pr;
Proc2(%paddr(Proc1));
dcl-proc Proc1;
dcl-pi *n *IND;
parm1 char(123);
parm2 int(10);
end-pi;
...
end-proc Proc1;
* SRVPGM
dcl-proc Proc2;
dcl-pi *n;
ptr pointer(*PROC)
end-pi;
//defined prototype for callback
// as EXTernal PROCedure pointed to by ptr
dcl-pr callback extproc(ptr) *IND;
cbParm char(123);
cbParm2 int(10);
end-pr;
dcl-s param char(123) inz('xxxaaaqqq')
dcl-s myInt int(10);
dcl-s success ind;
success = callback(param:myInt); // call callback
end-proc Proc2;
告诉我们如何添加parms,我会留下深刻的印象。您已经成功地通过地址将程序名称传递给过程。 – danny117
@ danny117,添加一个parm?只需添加parm,回调已经有一个Proc2 ... – Charles
parm是回调的地址。如果它有一些数据使其有用,它会令人印象深刻。例如,成功失败parm回调(param:success); – danny117