ランタイム システム エラーの発生時に自動的に呼び出されるエラー プロシージャを登録または解除します。
構文:
call "CBL_ERROR_PROC" using install-flag
install-addrs
returning status-code
パラメーター:
- install-flag
- 呼び出しプロトタイプ (「説明の読み方」を参照):cblt-x1-compx
- PIC:pic x comp-x
- install-addrs
- 呼び出しプロトタイプ (「説明の読み方」を参照):cblt-ppointer
- PIC:USAGE PROCEDURE-POINTER
- status-code
- 「説明の読み方」を参照してください。
入力パラメーター:
- install-flag
- 実行する処理
- 0:エラー プロシージャを登録する
- 1:エラー プロシージャを登録解除する
- install-addrs
- 登録または登録解除するエラー プロシージャのアドレス
説明:
.NET 環境では、エラー プロシージャはアプリケーションで処理されなかった RTS 例外に対してのみ実行されます。
このルーチンを繰り返し呼び出すことで、1 つのアプリケーションに複数のエラー プロシージャを登録できます。
登録済みのエラー プロシージャは、再登録を試みても無視されます。同じエラー プロシージャを再登録するには、その前に登録を解除する必要があります。エラー プロシージャの登録はエラー処理中などに暗黙的に解除されるほか、install-flag を「1」に設定した CBL_ERROR_PROC を呼び出して明示的に解除することも可能です。
エラー プロシージャは任意の言語で記述できます。COBOL の場合は、install-addrs にエントリ ポイントのアドレスを指定する必要があります。エントリ ポイントのアドレスは、次の文で取得できます。
COBOL のエラー プロシージャには、CALL 文を含む有効な COBOL コードを必要に応じて使用できます。
エラーが発生すると、登録した各プロシージャが順次実行されます。実行順序は登録順序とは逆で、後から登録したプロシージャが先に実行されます。すべてのプロシージャの実行が完了すると、続いて RTS のエラー処理プロシージャが開始されます。
最後に登録したプロシージャのみを実行し、その他の登録済みプロシージャやランタイム システムのエラー処理を回避するには、RETURN-CODE をゼロに設定します。
エラー プロシージャを含むプログラムをキャンセルすると、そのエラー プロシージャの登録は解除されます。
プログラムに登録しているエラー プロシージャは、他のプログラムによって解除できます。
エラー プロシージャから他のエラー プロシージャを登録することも可能です。
エラー処理中に登録されたエラー プロシージャは、それを登録したエラー プロシージャに続いて実行されます。処理中のエラー プロシージャによって登録された場合には、現在のエラー プロシージャの完了後に実行されます。ただし、エラー プロシージャの戻りコードがゼロの場合は、その時点でエラー処理が終了します。
エラー プロシージャ内で RTS エラーが発生すると、そのプロシージャはただちに終了します。次に実行すべきエラー プロシージャが存在する場合には、発生した RTS エラーの処理がそのプロシージャによって開始されます。
プロシージャを登録する場合には、必ず有効な手続きポインターを使用してください。
エラー プロシージャは登録元の実行単位に属します。そのため、エラー プロシージャを実行できるのは、それを登録した実行単位のみです。
キーボード割り込みでエラー プロシージャが呼び出されることはありません。
エラー プロシージャをプログラム内のエントリ ポイントの 1 つとして定義し、そのプログラムで発生する可能性があるエラーに備える場合には、局所記憶節を確保してください。局所記憶節を持つプログラムは再入可能であるため、エラー プロシージャが呼び出されてもランタイム システム エラー 166 は生成されません (エラー 166 は再帰的な COBOL 呼び出しが無効であることを示します)。
登録したエラー プロシージャの呼び出しでは、その原因になった RTS エラーのメッセージ文字列がパラメーターとして渡されます。
このパラメーターは、メッセージ全体を保持できるだけの大きさにして連絡節で定義し、USING 指定でエラー プロシージャの呼び出しに含めます。一部の可変幅エンコーディング (日本語 UTF-8 など) では、最大の長さのエラー メッセージに対応するために PIC x(1285) の大きさの項目が必要です。ただし、英語で表示されるメッセージには PIC x(325) で十分です。