Alexandre Kalendarev
Alexandre Kalendarev

Reputation: 681

How To Call procedure by pointer in RPGLE

I use callback in the service module. The pointer of the callback function I want to pass as procedure parameter.

How I could to call the my callback function in the service module?

psevdocode:

main code:

 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;

Service 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;

Upvotes: 0

Views: 2284

Answers (1)

Charles
Charles

Reputation: 23823

%PADDR() (Get Procedure Address) built in function
PROCPTR keyword (in fixed format d-specs)
POINTER(*PROC) (in free format 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;

Upvotes: 3

Related Questions