ActiveX オートメーション

メソッド

「タイプライブラリ」を使用しないで VLA オブジェクトのメソッドに共通してアクセスする方法は次の通りです。なお、これは AutoCAD の VLA オブジェクトに対しても使用でき、vla-メソッド名 のものよりもオーバーヘッドが少なくなります。

AutoLISP関数
(vlax-invoke-method obj method [arg...])
obj:VLA オブジェクト
method:シンボルまたは文字列
arg:アトム
VLA オブジェクトのメソッドを呼び出します。
戻り値:アトム

vlax-invoke-method 関数は、VLA オブジェクトのメソッドを呼び出します。

obj 引数には、対象の VLA オブジェクトを指定します。

method 引数は、設定するメソッド名をシンボルか文字列の形で渡します。文字列の場合でも、大文字小文字は区別されません。

arg 引数は、メソッドに与える引数を必要なだけ並べることができます。リスト渡しではありません。

戻り値は、呼び出したメソッドに依存した値です。

次の例は AutoCAD の VLA オブジェクトに対してですが、変数 arc に代入された円弧の VLA オブジェクトを、X 方向に 50 移動させます。

(vlax-invoke-method
arc
'Move
(vlax-3D-point 0.0 0.0 0.0) ;基点
(vlax-3D-point 50.0 0.0 0.0) ;目的点
)

プロパティ

「タイプライブラリ」を使用しないで VLA オブジェクトのプロパティに共通してアクセスする方法は次の通りです。これは、AutoCAD の VLA オブジェクトに対しても使用でき、vla-get-プロパティ名 や vla-put-プロパティ名 よりオーバーヘッドが少なくなります。

AutoLISP関数
(vlax-get-property obj property [arg...])
obj:VLA オブジェクト
property:シンボルまたは文字列
arg:アトム
VLA オブジェクトのプロパティを取得します。
戻り値:アトム,バリアント型、またはnil

vlax-get-property 関数は、VLA オブジェクトのプロパティを取得します。

obj 引数には、対象の VLA オブジェクトを指定します。

property 引数は、調べるプロパティ名をシンボルか文字列の形で渡します。文字列の場合でも、大文字小文字は区別されません。

arg 引数は、外部アプリケーションのVLA オブジェクトのプロパティの取得では引数を使うものもあります。AutoCAD のヘルプでは書かれていませんが、必要な場合は付加してください。

戻り値はプロパティの値で、整数、実数、文字列といった型や、セーフ配列のバリアント型などが返ります。取得できなかった場合は nil が返ります。

次の例は AutoCAD の VLA オブジェクトに対してですが、変数 arc に円弧の VLA オブジェクトが代入されています。

_$ (vlax-get-property arc 'Layer) ⏎
"0"
_$ (vlax-get-property arc 'LineType) ⏎
"BYLAYER"
_$ (vlax-get-property arc 'ArcLength) ⏎
157.08
_$ (vlax-get-property arc 'Center) ⏎
#<variant 8197 ...>
AutoLISP関数
(vlax-put-property obj property arg)
obj:VLA オブジェクト
property:シンボルまたは文字列
arg:アトム
VLA オブジェクトのプロパティを設定します。
戻り値:nil

vlax-put-property関数は、VLA オブジェクトのプロパティに値を設定します。

obj 引数には、対象の VLA オブジェクトを指定します。

property 引数は、設定するプロパティ名をシンボルか文字列の形で渡します。文字列の場合でも、大文字小文字は区別されません。

arg 引数は、設定するプロパティの値です。

戻り値は、関数が成功すれば nil が返ります。失敗した場合はエラーが発生します。

次の例は AutoCAD の VLA オブジェクトに対してですが、arc 変数に代入された円弧の中心を読み取り、X 方向に 50 ほど移動させた座標を中心に設定します。

(setq c (vlax-safearray->list (vlax-variant-value (vla-get-property arc 'Center))))
(vlax-put-property arc 'Center (vlax-3D-point (mapcar '+ c '(50.0 0.0 0.0))))

タイプライブラリ

「タイプライブラリ」は、VLA オブジェクトがどのようなメソッドやプロパティを持っているか情報を含んだファイルです。これを AutoLISP の実行環境に読み込むことで、AutoCAD の VLA オブジェクトに対する vla-メソッド名や vla-get-プロパティ名といった方式のメソッド名を含んだメソッド関数や、プロパティ名を含んだプロパティアクセス関数が定義されます。「タイプライブラリ」となりうるファイルの種類は以下のようなものがあります。

種類 拡張子
タイプライブラリ .tlb
オブジェクトライブラリ .olb
実行形式ファイル .exe
タイプライブラリリソースを含んだライブラリファイル .dll
その他 LoadTypeLib API が認識可能なファイル -

「タイプライブラリ」として利用できるファイルを探すには、AutoCAD の Visual Basic エディタを利用すると便利です。AutoCAD から Visual Basic エディタを開いた後、【ツール】>【参照設定】でダイアログを開きます。ここで一覧となっているものが「タイプライブラリ」です。下にファイルの名前と場所が表示されるので確認してください。

Type library
AutoLISP関数
(vlax-typeinfo-available-p obj)
obj:VLA オブジェクト
指定された VLA オブジェクトに利用可能な「タイプライブラリ」が存在するか調べます。
戻り値:nil、またはnil以外

vlax-typeinfo-available-p 関数は、VLA オブジェクトに利用できる「タイプライブラリ」が存在するかどうかを調べます。

obj 引数には、調べる VLA オブジェクトを指定します。

戻り値は、「タイプライブラリ」が存在していれば nil 以外が、そうでなければ nil が返ります。

_$ (vlax-get-or-create-object "Excel.Application")⏎
#<VLA-OBJECT _Application 0000000030e68918>
_$ (vlax-typeinfo-available-p (vlax-get-object "Excel.Application"))⏎
T
AutoLISP関数
(vlax-import-type-library
        :tlb-filename      filename
       [:methods-prefix    mprefix
        :properties-prefix pprefix
        :constants-prefix  cprefix]
)
filename:文字列
mprefix、pprefix、cprefix:文字列
ファイルからタイプライブラリ情報を読み込みます。
戻り値:nil、またはnil以外

vlax-import-type-library 関数は、タイプライブラリ情報をファイルから読み込み、AutoLISP からアクセス可能なラッパー関数を作成します。「タイプライブラリ」の読み込みは、プログラムのロード時に行うことが推奨されています。

この関数は、他の関数に見られないキーワード付きで引数を指定する特殊形式をしています。「:tlb-filename」や「:methods-prefix」といった先頭に「:」(コロン)が付いたものがキーワードで、引数ではありません。キーワードに続いて対応する引数を書きます。

filename 引数は、読み込むタイプライブラリのファイルを指定します。【サポートファイルの検索パス】内であれば、パスを省略できます。

mprefix、pprefix 引数は、順にメソッド、プロパティのアクセス関数につける接頭辞の文字列です。AutoCAD の VLA オブジェクトで付ける「vla-」に当たります。cprefix 引数は定数に付ける接頭辞で、AutoCAD では「ac」といったものです。省略された場合は、接頭辞が付きません。

戻り値は、正常にタイプライブラリを読めこめた場合は nil 以外が、失敗した場合は nil が返ります。

下の例は、Microsoft Excel のタイプライブラリを読み込みます。「タイプライブラリ」のファイルはパージョンやその他の環境によって異なります。適時変更してください。

_$ (vlax-import-type-library
:tlb-filename
"C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE"
:methods-prefix "mea-"
:properties-prefix "mea-"
:constants-prefix "mc-"
)⏎
T

これにより、Excel の VLA オブジェクトにアクセスする、mea-メソッド名、mea-put-プロパティ名、mea-get-プロパティ名 といったラッパー関数が定義されました。また、定義済みの定数をおさめたシンボルには、 mc- という接頭辞が付きました。VisualLISP の【該当】を使うと手っ取り早く一覧を見ることができます。

excel typelibrary