ユーザー定義関数における、C言語関数のリンクと呼出しシーケンスを、以下の図に示します。
連結処理において、C言語関数名:Defuncとした場合の例です。
図7.5 ユーザー定義関数の呼出し(C API利用時)
AsisLoadFunction関数を呼び出したとき、指定されたライブラリをロードします。
各機能の実行API(AsisExecuteReplace関数など)を呼び出したとき、最初に、指定されたすべてのユーザー定義関数に対して、対応するC言語関数を呼び出し種別「DE_USER_FUNCTION_THREAD_OPEN」で呼び出します。
その後、使用されているユーザー定義関数に対して、対応するC言語関数を呼出し種別「DE_USER_FUNCTION_EXEC」および呼び出し種別「DE_USER_FUNCTION_FREE」で呼び出します。最後に、すべてのユーザー定義関数に対して、対応するC言語関数を呼び出し種別「DE_USER_FUNCTION_CLOSEDE_USER_FUNCTION_THREAD_CLOSE」で呼び出します。
AsisUnloadFunction関数を呼び出したとき、ライブラリをアンロードします。
C API利用時の注意事項
呼び出し種別「DE_USER_FUNCTION THREAD_OPEN」で呼び出したときに返却されるハンドルは、ユーザー定義関数ごとに共有のものになります。
ユーザー定義関数は、参照透過性があるものとみなします。
ユーザー定義関数は、その結果が処理に必要になると判断された場合にだけ呼び出されます。以下のような場合は、呼び出されないことがあります。
連結機能で呼び出されたが、結合型に「INNER」が指定されて1つのレコードも連結されなかった場合
仮想項目機能のIF式で呼び出されたが、条件が正にならなかった場合
ユーザー定義関数は、「DE_USER_FUNCTION_EXEC」と「DE_USER_FUNCTION_FREE」で完結した処理を実施してください。
例:終了処理で、「DE_USER_FUNCTION_EXEC」で実行した回数を取得することはしない。