操作記述子の使用
時には、データ・タイプが呼び出されるプロシージャーに正確に分からない 場合でも (例えば、異なるタイプのストリング)、パラメーターを プロシージャーに渡すことが必要な場合があります。 こうした場合には、パラメーターの形式について 呼び出されたプロシージャーに記述情報を提供するために、操作記述子を使用することが できます。 この追加情報によって、プロシージャーはストリングを適切に解釈することができ ます。 呼び出されるプロシージャーに必要な場合にだけ、操作記述子を使用す る必要があります。
操作記述子は、渡されるパラメーターやパラメーターが渡される方法には影響 しません。 必要でない操作記述子がプロシージャーに渡された時には、単にその 操作記述子が無視されるだけです。
プロトタイプと非プロトタイプの両方のパラメーターについて操作記述子を 要求することができます。 プロトタイプのパラメーターでは、プロトタイプ定義にキーワード OPDESC を 指定します。 非プロトタイプのパラメーターでは、CALLB 命令の命令コード拡張子として (D) を指定します。 いずれの場合にも、操作記述子は呼び出しプロシージャーによって作成され 、呼び出されたプロシージャーに隠れたパラメーターとして渡されます。 操作記述子は省略されたパラメーターには作成されません。
ILE バインド可能 API の検索操作記述子 (CEEDOD)、 およびストリング引数に関する記述情報の取得 (CEESGI) を使って、操作記述子から情報を取り出すことができます。
操作記述子はバインド呼び出しでしか使用できないことに注意してください。 さらに、 非プロトタイプ呼び出しで 'D' 操作コード拡張子が CALL 命令に指定されると、 エラー・メッセージがコンパイラーによって出されます。
図 1 は、キーワード OPDESC の例を示します。
*-------------------------------------------------------------
* Len が 10 桁の整数値を戻します。パラメーターは
* 読み取り専用参照により渡されたストリングです。
* Len がパラメーターの長さを知るために、
* 操作記述子が必要です。
* パラメーターを 32767 バイトよりも小さくするために
* OPTIONS(*VARSIZE) が必要です。
*-------------------------------------------------------------
D Len PR 10I 0 OPDESC
D 32767A OPTIONS(*VARSIZE) CONST
操作記述子の使用方法の例については、 サンプル・サービス・プログラムを参照してください。この例は、渡される文字ストリングを 16 進等価値に変換する サービス・プログラムから構成されます。 サービス・プログラムは操作記述子を使用して、文字ストリングの長さおよび 変換する長さを決定します。