如何在 RPGLE 中通过指针调用过程

How To Call procedure by pointer in 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;

服务计划

 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-specs)
POINTER(*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;

这篇文章有一个关于如何使用过程指针的例子。

https://github.com/OSSILE/OSSILE/tree/master/code_examples/rpg/interfaces