【Visual Lisp】变体与安全数组

时间:2022-06-23 00:40:13

(vlax-make-variant) ;;创建一个未初始化的变体

;;01.整型值变体
(setq myvar (vlax-make-variant 10)) ;;创建整型值变体,返回 #<variant 3 10>
(vlax-variant-type myvar) ;;获取变体类型,返回 3
(vlax-variant-value myvar) ;;获取变体中的值 ,返回10

;;02.双精度值型变体
(setq myvar2 (vlax-make-variant 10.2)) ;;返回 #<variant 5 10.2>
(vlax-variant-type myvar2) ;;获取变体类型,返回 5
(vlax-variant-value myvar2) ;;获取变体中的值 ,返回10.2

;;03.字符串值型变体
(setq myvar3 (vlax-make-variant "10string")) ;;返回 #<variant 8 10string>
(vlax-variant-type myvar3) ;;获取变体类型,返回 8
(vlax-variant-value myvar3) ;;获取变体中的值 ,返回"10string"

;;04.存储双精度值二维安全数组类型的变体
(setq dbArray (vlax-make-safearray vlax-vbDouble '(0 . 3) '(1 . 2))) ;;创建安全数组,返回 #<safearray...>
(vlax-safearray-fill dbArray '((1 2) (3 4) (5 6) (7 8))) ;;使用fill函数给变体一次性赋值,返回 #<safearray...>
(setq mydbSaVar (vlax-make-variant dbArray )) ;;用安全数组创建变体,返回 #<variant 8197 ...>
(vlax-variant-type mydbSaVar) ;;获取变体类型,返回 8197
(setq mydbArray (vlax-variant-value mydbSaVar)) ;;获取变体值,返回 #<safearray...>
(vlax-safearray->list mydbArray) ;;将安全数组以表的形式返回,返回 ((1.0 2.0) (3.0 4.0) (5.0 6.0) (7.0 8.0))
(vlax-safearray-get-dim mydbArray) ;;安全数组的维数,返回 2
(vlax-safearray-get-l-bound mydbArray 1) ;;安全数组指定维度的下界,返回0
(vlax-safearray-get-u-bound mydbArray 2) ;安全数组指定维度的上界,返回2
;;要点:
;;创建数组的时候要指定存储数据的类型
;;维度的维数,维度下界和上界,数组元素和维度的对应
;;用fill时,数组一定要填满

;;05.存储字符串值二维安全数组类型的变体
(setq strArray (vlax-make-safearray vlax-vbString '(1 . 3) '(1 . 2))) ;;创建安全数组,返回 #<safearray...>
(vlax-safearray-put-element strArray 1 1 "Hello") ;;给数组元素赋值,使用put函数,返回 "Hello"
(vlax-safearray-put-element strArray 2 2 "HaHaHa") ;;给数组元素赋值,使用put函数,返回 "HaHaHa"
(setq myStrSaVar (vlax-make-variant strArray )) ;;用数组创建变体,返回 #<variant 8200 ...>
(vlax-variant-type myStrSaVar) ;;获取变体类型,返回 8200
(setq mystrArray (vlax-variant-value myStrSaVar)) ;;获取变体值,返回 #<safearray...>
(vlax-safearray-get-element mystrArray 1 1) ;;获取下标为1 1的数组元素,返回 "Hello"
(vlax-safearray->list mystrArray) ;;将安全数组以表的形式返回,返回 (("Hello" "") ("" "HaHaHa") ("" ""))