(vla-GetInterfaceObject (vlax-get-acad-object) "wscript.shell")可以获得
另外,(setq a (vla-GetInterfaceObject (vlax-get-acad-object) "ScriptControl"))总容易引起内存不足的错误,好像(setq a (vlax-create-Object "ScriptControl"))不会,没有过多的测试,:)
对于没有返回值的过程要调用ScriptControl对象的ExecuteStatement方法
不过对于Randomize好像没什么用,Randomize作用于过程,如果做出来了的话,调用Randomize和Rnd是两个过程,没有效果
另外,我上面的方法有问题,ScriptControl对象不能做全局变量,只能做局部变量,否则总会引起内存不足(太大了),Rnd不能用这种方法,其他的可以
下面做成函数调用VBS函数
调用格式:
(tls-eval 'msgbox '("Are u ready?" 1 "TlsCad"))

- (defun tls-vbs()
- (setq Tls-VBScript (vlax-create-Object "ScriptControl"))
- (vlax-put-property Tls-VBScript "language" "vbs")
- Tls-VBScript
- )
- (defun tls-join(chrs fchr / pstr)
- (setq pstr "")
- (foreach i Chrs (setq pstr (strcat pstr i fchr)))
- (substr pstr 1 (- (strlen pstr) (strlen fchr)))
- )
- (defun tls-eval(funname args)
- (vla-eval (tls-vbs) (strcat (vl-prin1-to-string funname) "(" (tls-join (mapcar 'vl-prin1-to-string args) ",") ")"))
- )
|