Reputation: 681
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
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