vl-catch-all-apply 関数を使用することにより、ActiveX のメソッドが返したエラーをトラップし、プログラムをどのように継続すべきかを決定することができます。
[ファイルを新規作成]をクリックします。
[名前を付けて保存]をクリックします。
(defun init-motivate ()
(vl-load-com)
(setq mspace
(vla-get-modelspace
(vla-get-activedocument (vlax-get-acad-object))
)
)
(vla-addray mspace (vlax-3d-point 0 0 0) (vlax-3d-point 1 1 0))
)
(defun bnddrop (/ bbox)
(setq bbox (vla-getboundingbox
(vla-item mspace (- 1 (vla-get-count mspace)))
'll
'ur
)
)
(list "Do something with bounding box." bbox)
)
[エディタ内のテキストをロード]をクリックします。
放射線は無限に延びているため、ボックスで囲むことはできません。このため、GetBoundingBox メソッドは次のエラーになります。
; error: Automation Error. Invalid extents
このコードをアプリケーション プログラムの一部にすると、この時点で実行が停止します。
(defun bndcatch (/ bbox)
(setq bbox (vl-catch-all-apply
'vla-getboundingbox
(list (vla-item mspace (- 1 (vla-get-count mspace)))
'll
'ur
)
)
)
(if (vl-catch-all-error-p bbox)
(list "Exception: " (vl-catch-all-error-message bbox))
(list "Do something with bounding box." bbox)
)
)
この関数は、vl-catch-all-apply 関数を使用して vla-getboundingbox 関数を呼び出します。vl-catch-all-apply 関数には 2 つの引数を指定します。1 つは ('vla-getboundingbox) を呼び出す関数の名前を指定するシンボルで、もう 1 つは vla-getboundingbox 関数に渡される引数のリストです。GetBoundingBox メソッドが正常に終了すると、vl-catch-all-apply 関数が戻り値を変数 bbox に格納します。呼び出しに失敗すると、vl-catch-all-apply 関数が bbox にエラー オブジェクトを格納します。
vl-catch-all-error-p 関数の呼び出しは、vl-catch-all-apply 関数からの戻り値をチェックして、それがエラー オブジェクトである場合は T を返し、エラー オブジェクトでない場合は nil を返します。 この例でのように戻り値がエラー オブジェクトの場合、関数は vl‑catch‑all‑error‑message 関数を呼び出してエラー オブジェクトからメッセージを取得します。この時点からプログラムが続けて実行されます。