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

时间:2017-10-12 23:00:42

标签: 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;

2 个答案:

答案 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