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 関数を呼び出してエラー オブジェクトからメッセージを取得します。この時点からプログラムが続けて実行されます。