2017-10-12 22 views
0

サービスモジュールでコールバックを使用します。手続きパラメータとして渡したいコールバック関数のポインタ。RPGLEのポインタでプロシージャを呼び出す方法

サービスモジュールのコールバック関数をどのように呼び出すことができますか?

psevdocode:

メインコード:機能
PROCPTRキーワードに建て

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

%のPADDR()(手順アドレスを取得)(固定フォーマット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; 
+0

parmsを追加する方法を教えてください。私は感心します。あなたはプログラム名を手続きに住所で渡すことに成功しました。 – danny117

+0

@ danny117、parmを追加しますか?パラメータを追加するだけで、コールバックにはProc2と同様にコールバックがあります。 – Charles

+0

parmはコールバックのアドレスです。それが有用ないくつかのデータを持っていれば印象的です。成功したparmコールバック(param:success); – danny117

関連する問題