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

问题描述:

我在服务模块中使用回调。我想作为过程参数传递的回调函数的指针。如何在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; 

服务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; 

%PADDR()(获得程序地址)内置函数
PROCPTR关键字(在固定格式d - 规格)
POINTER(* PROC)(*格式d规格)

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; 
+0

告诉我们如何添加parms,我会留下深刻的印象。您已经成功地通过地址将程序名称传递给过程。 – danny117

+0

@ danny117,添加一个parm?只需添加parm,回调已经有一个Proc2 ... – Charles

+0

parm是回调的地址。如果它有一些数据使其有用,它会令人印象深刻。例如,成功失败parm回调(param:success); – danny117

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

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