smartstar 发表于 2012-8-15 13:00:11

【求助】错误: Visual LISP command document mismatch

自己集合的一个lisp工具,在cad08中运行正常。我的程序命令都有ark_前缀,然后通过自定义的pgp文件进行命令简化。在2012中,在第一张打开的图形中能够正常运行,在随后打开的文档中使用简化命令就会提示:错误: Visual LISP command document mismatch
完整的cad的命令可以正常运行。我在论坛中看到说是定义的内部命令,不支持多文档之间切换。
但是我安装 xshrimp大哥的工具箱就没有问题, xshrimp大哥的程序也进行了命令简化,运行正常。希望高人帮帮小弟。谢谢。

edata 发表于 2015-9-20 21:12:20

本帖最后由 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-15 13:11:50

本帖最后由 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)) ;自动加载反应器.




流星蔡园 发表于 2014-5-18 15:33:37

同样问题,关注。。。

流星蔡园 发表于 2015-9-24 21:21:17

已解决,暂未发现新的问题,感谢楼上的热心帮助。

郊邶丶阿宸 发表于 2016-3-30 17:18:49

berke 发表于 2024-1-6 12:30:51

谢谢!
页: [1]
查看完整版本: 【求助】错误: Visual LISP command document mismatch