操作記述子の使用

時には、データ・タイプが呼び出されるプロシージャーに正確に分からない 場合でも (例えば、異なるタイプのストリング)、パラメーターを プロシージャーに渡すことが必要な場合があります。 こうした場合には、パラメーターの形式について 呼び出されたプロシージャーに記述情報を提供するために、操作記述子を使用することが できます。 この追加情報によって、プロシージャーはストリングを適切に解釈することができ ます。 呼び出されるプロシージャーに必要な場合にだけ、操作記述子を使用す る必要があります。

多くの ILE バインド可能 API には、操作記述子が必要です。 任意のパラメーターが「記述子による」と定義されている場合は、操作記述子を API に渡す必要があります。この例は、ILE CEE API CEEDATM (秒数を文字タイム・スタンプに変換) です 。 2 番目および 3 番目のパラメーターには操作記述子が必要です。

注:
現在、ILE RPG コンパイラーは文字および図形タイプの操作記述子しかサポートしません。 操作記述子は配列または表、数字タイプのデータ、日付、タイム・スタンプ、基底 ポインター、またはプロシージャー・ポインターでは使用できません。さらに、操作記述子は、CALLB を使用して作成された非プロトタイプの呼び出し用のデータ構造では使用 できません。 ただし、プロトタイプの呼び出しに対しては、データ構造は文字データと見なされ、操作記述子は使用可能です。

操作記述子は、渡されるパラメーターやパラメーターが渡される方法には影響 しません。 必要でない操作記述子がプロシージャーに渡された時には、単にその 操作記述子が無視されるだけです。

プロトタイプと非プロトタイプの両方のパラメーターについて操作記述子を 要求することができます。 プロトタイプのパラメーターでは、プロトタイプ定義にキーワード OPDESC を 指定します。 非プロトタイプのパラメーターでは、CALLB 命令の命令コード拡張子として (D) を指定します。 いずれの場合にも、操作記述子は呼び出しプロシージャーによって作成され 、呼び出されたプロシージャーに隠れたパラメーターとして渡されます。 操作記述子は省略されたパラメーターには作成されません。

ILE バインド可能 API の検索操作記述子 (CEEDOD)、およびストリング引数に関する記述情報の取得 (CEESGI) を使って、操作記述子から情報を取り出すことができます。

操作記述子はバインド呼び出しでしか使用できないことに注意してください。 さらに、 非プロトタイプ呼び出しで 'D' 操作コード拡張子が CALL 命令に指定されると、 エラー・メッセージがコンパイラーによって出されます。

図 67 は、キーワード OPDESC の例を示します。

図 67. プロトタイプ・プロシージャーの操作記述子の要求
      *-------------------------------------------------------------
      *  Len が 10 桁の整数値を戻します。パラメーターは
      * 読み取り専用参照により渡されたストリングです。
      * Len がパラメーターの長さを知るために、
      * 操作記述子が必要です。
      *  パラメーターを 32767 バイトよりも小さくするために
      *  OPTIONS(*VARSIZE) が必要です。
      *-------------------------------------------------------------
     D Len             PR            10I 0 OPDESC
     D                            32767A   OPTIONS(*VARSIZE) CONST

操作記述子の使用方法の例については、 サンプル・サービス・プログラムを参照してください。この例は、渡される文字ストリングを 16 進等価値に変換する サービス・プログラムから構成されます。 サービス・プログラムは操作記述子を使用して、文字ストリングの長さおよび 変換する長さを決定します。