【求助】错误: Visual LISP command document mismatch
自己集合的一个lisp工具,在cad08中运行正常。我的程序命令都有ark_前缀,然后通过自定义的pgp文件进行命令简化。在2012中,在第一张打开的图形中能够正常运行,在随后打开的文档中使用简化命令就会提示:错误: Visual LISP command document mismatch完整的cad的命令可以正常运行。我在论坛中看到说是定义的内部命令,不支持多文档之间切换。
但是我安装 xshrimp大哥的工具箱就没有问题, xshrimp大哥的程序也进行了命令简化,运行正常。希望高人帮帮小弟。谢谢。
本帖最后由 edata 于 2015-9-24 20:39 编辑
新版反应器不能跨文件执行,构建的vlr-documentBecameCurrent反应器,只能在当前文档执行,
而vla-add-cmd构建命令之后,在新旧文档都存在这个命令。不过新文件的命令没有函数的支持,造成命令不匹配,所以提示 Visual LISP command document mismatch 。解决方式是(vlax-remove-cmd shortCMD);删除已定义的命令.然后重新定义。
反应器无效,所以建议采用启动组的方式加载这个lisp,或者acad.lsp。总之能启动这个lisp就能加载自定义命令。
2015年9月24日20:38:41
因为没了反应器,所以会造成前面的文档无法使用,因此直接更改为defun版。
;;;********************************
;;; 工具快捷命令初始化 函数
;;;********************************
(defun C:ark_qgqc (/ PGPFile fp i xString aList shortCMD GlobalCMD)
(princ"\n自定义文件已经重新加载!")
(vl-load-com)
(setq PGPFile "Arktools.pgp") ;
(if (setq PGPFile (findfile PGPFile))
(progn ;then
(setq fp (open PGPFile "r"))
(setq i 1)
(while (setq xString (read-line fp))
(if (= (type xString) 'SYM)
(setq xString (vl-symbol-name xString))
) ;转换数据文件中无引号的字符串.
(while (vl-string-search " " xstring) ;去掉所有的空格.
(setq xString (vl-string-subst "" " " xstring)) ;空格.
(setq xString (vl-string-subst "" " " xstring)) ;tab符.
) ;end_while
(if (and (/= (substr xString 1 1) ";")
(vl-string-search "," xstring)
(vl-string-search "*" xstring)
)
(progn
(setq aList
(read (strcat "("
(vl-string-subst " . C:" ",*" xString)
")"
)
)
)
(setq shortCMD
(vl-string-trim " " (vl-symbol-name (car aList)))
)
(setq GlobalCMD (cdr aList))
;(vlax-remove-cmd shortCMD);删除已定义的命令.
;(vlax-add-cmd shortCMD GlobalCMD)
(eval(read(strcat "(defun c:" (vl-symbol-name (car aList)) "() (" (vl-symbol-name (cdr aList)) "))")))
) ;end_progn
) ;end_if
(setq i (+ i 1))
) ;end_while read-line
(close fp)
) ;end_progn then
(princ
"\n工具简化命令定义文件 Arktools.pgp 没找到或不存在!"
)
) ;end_if
(setvar "RE-INIT" 16)
) ;end_defun
(C:ark_qgqc) ;调用工具快捷命令自动加载函数. 本帖最后由 smartstar 于 2012-8-16 12:42 编辑
我用的自定义快捷命令程序:
忘记是谁写的了,但在这里表示感谢。
;;;********************************
;;; 工具快捷命令初始化 函数
;;;********************************
(defun C:ark_qgqc (/ PGPFile fp i xString aList shortCMD GlobalCMD)
; (princ"\n自定义文件已经重新加载!")
(vl-load-com)
(setq PGPFile "Arktools.pgp") ;
(if (setq PGPFile (findfile PGPFile))
(progn ;then
(setq fp (open PGPFile "r"))
(setq i 1)
(while (setq xString (read-line fp))
(if (= (type xString) 'SYM)
(setq xString (vl-symbol-name xString))
) ;转换数据文件中无引号的字符串.
(while (vl-string-search " " xstring) ;去掉所有的空格.
(setq xString (vl-string-subst "" " " xstring)) ;空格.
(setq xString (vl-string-subst "" " " xstring)) ;tab符.
) ;end_while
(if (and (/= (substr xString 1 1) ";")
(vl-string-search "," xstring)
(vl-string-search "*" xstring)
)
(progn
(setq aList
(read (strcat "("
(vl-string-subst " . C:" ",*" xString)
")"
)
)
)
(setq shortCMD
(vl-string-trim " " (vl-symbol-name (car aList)))
)
(setq GlobalCMD (cdr aList))
;(vlax-remove-cmd shortCMD);删除已定义的命令.
(vlax-add-cmd shortCMD GlobalCMD)
) ;end_progn
) ;end_if
(setq i (+ i 1))
) ;end_while read-line
(close fp)
) ;end_progn then
(princ
"\n工具简化命令定义文件 Arktools.pgp 没找到或不存在!"
)
) ;end_if
(setvar "RE-INIT" 16)
) ;end_defun
;;;┏━━━━━━━━━━━━━━━━┓
;;;┃工具快捷命令自动加载(反应器调用)┃
;;;┗━━━━━━━━━━━━━━━━┛
(C:ark_qgqc) ;调用工具快捷命令自动加载函数.
(defun ayLoadSCMDReactor () ;建立AutoCAD文档级反应器.
(vl-load-com)
(if (not #AY_LOADSCMDREACTOR)
(setq #AY_LOADSCMDREACTOR
(vlr-docmanager-reactor
nil
'((:vlr-documentBecameCurrent
.
AI:aySCMDCallBack
)
)
)
)
) ;end_if
(defun AI:aySCMDCallBack (aReactor bList) (C:ark_qgqc))
;;;定义反应器的回调函数.
) ;end_defun
(or #AY_LOADSCMDREACTOR (ayLoadSCMDReactor)) ;自动加载反应器.
同样问题,关注。。。 已解决,暂未发现新的问题,感谢楼上的热心帮助。 谢谢!
页:
[1]