概要 - セーフ配列の要素を作成する(AutoLISP/ActiveX)

vlax-make-safearray を使用して配列を作成したら、vlax-safearray-fill または vlax-safearray-put-element を使用して配列にデータを格納することができます。

注: AutoLISP での ActiveX のサポートは Windows のみに制限されています。

vlax-safearray-fill を使用して配列を作成する

vlax‑safearray‑fill 関数には、2 つの引数を指定する必要があります。1 つは、作成しようとしている配列を格納する変数で、もう 1 つは配列の要素に割り当てられる値のリストです。配列内の要素の数だけ値を指定する必要があります。

たとえば、次のコードは 3 つの倍精度浮動小数点数型の 1 次元配列を作成します。

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
(vlax-safearray-fill point (list 100 100 0))
#<safearray...>

配列の内容は、vlax-safearray->list 関数を使用してリスト形式で表示することができます。

(vlax-safearray->list point)
(100.0 100.0 0.0)

配列内の各要素に対して値を指定しないと、vlax-safearray-fill 関数はエラーになります。

複数次元の配列を使用するときは、vlax-safearray-fill 関数に、次元に対応する各リストからなるリストを渡す必要があります。たとえば、次の文は文字列の 2 次元配列に値を割り当てます。各次元には 3 つの要素が格納されます。

(setq mat2 (vlax-make-safearray vlax-vbString '(0 . 1) '(1 . 3)))
(vlax-safearray-fill mat2 '(("a" "b" "c") ("d" "e" "f")))
#<safearray...>

mat2 の内容を確認するには、vlax-safearray->list を使用します。

(vlax-safearray->list mat2)
(("a" "b" "c") ("d" "e" "f"))

vlax-safearray-put-element を使用して配列を作成する

vlax‑safearray‑put‑element 関数を使用すると、セーフ配列の 1 つまたは複数の要素に値を割り当てることができます。この関数で指定する引数の数は、配列内の次元の数によって異なります。vlax-safearray-put-element 関数に引数を指定するには、次の規則が適用されます。

たとえば、次のコードは 3 つの倍精度浮動小数点数型の 1 次元配列を作成します。

(setq point (vlax-make-safearray vlax-vbDouble '(0 . 2)))
#<safearray...>
 
(vlax-safearray-put-element point 0 100)
(vlax-safearray-put-element point 1 100)
(vlax-safearray-put-element point 2 0)

配列内の要素の値を変更する必要がある場合は、もう一度 vlax-safearray-put-element を呼び出すことができます。次の例は、配列の 2 番目の要素の値を 50 に変更します。

(vlax-safearray-put-element point 1 50)

次の例は、文字列の 2 次元配列を作成し、値を格納します。配列の最初の次元はインデックス 0 で始まり、2 番目の次元はインデックス 1 で始まります。

(setq mat2 (vlax-make-safearray vlax-vbString '(0 . 1) '(1 . 3)))
#<safearray...>

(vlax-safearray-put-element mat2 0 1 "a")
(vlax-safearray-put-element mat2 0 2 "b")
(vlax-safearray-put-element mat2 0 3 "c")
(vlax-safearray-put-element mat2 1 1 "d")
(vlax-safearray-put-element mat2 1 2 "e")
(vlax-safearray-put-element mat2 1 3 "f")

vlax‑safearray‑>list 関数を使用して、配列の内容を確認できます。

(vlax-safearray->list mat2)
(("a" "b" "c") ("d" "e" "f"))