表示: Delphi
C++
表示設定
例外の生成
提供:RAD Studio XE2
例外処理:インデックス への移動
破壊的エラーを通知するには,例外を生成します。例外を生成するには,エラー状況を説明する例外のインスタンスを構築し,raise 予約語を呼び出します。
例外を生成するには,予約語 raise に続けて例外オブジェクトのインスタンスを呼び出します。これにより,特定のアドレスから来る例外が作られます。例外ハンドラで例外を処理した場合は,処理が終了するときに例外インスタンスは破棄されます。したがって,手作業で例外インスタンスを破棄する必要はありません。
たとえば,次のように新しい例外クラスを宣言します。
type EPasswordInvalid = class(Exception);
パスワード無効例外を生成したいときには,以下のように EPasswordInvalid のインスタンスを生成します。
if Password <> CorrectPassword then raise EPasswordInvalid.Create('Incorrect password entered');
例外が発生した場合,SysUtils ユニットの ExceptAddr 関数で発生したアドレスを取得することができます。例外ハンドラで ExceptAddr を参照してエラーの発生場所をユーザーに知らせることもできます。例外が発生したときに ErrorAddr に示される値を raise 節に指定することもできます。
警告: 自分で ExceptAddr に値を代入してはなりません。ExceptAddr は読み出し専用として用意されています。
例外の生成アドレスを指定するには,予約語 at を例外インスタンスの後に追加し,さらにポインタまたはポインタを返す関数を続けます。たとえば,パスワードを返す DLL が致命的なエラーを起こした場合に,nil ではない値を返してくると仮定し,その値を ErrorPointer という変数が保持しているとします。