我在服务模块中使用回调。我想要作为过程参数传递的回调函数的指针。
如何在服务模块中调用我的回调函数?
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;
服务计划
dcl-proc Proc2;
dcl-pi *n;
ptr pointer;
end-pi;
dcl-s param char(123) inz('xxxaaaqqq')
*ptr( param ); // call callback
end-proc Proc2;
答案 0 :(得分:2)
%PADDR()(获取程序地址)内置功能
PROCPTR关键字(固定格式d-specs)
指针(* PROC)(自由格式d-specs)
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;
答案 1 :(得分:1)
本文提供了有关如何使用过程指针的示例。
https://github.com/OSSILE/OSSILE/tree/master/code_examples/rpg/interfaces