kele99kele 发表于 2015-8-10 17:11:42

请问我这个程序为什么每次加载第一次失败,第二次才能成功呢?

程序如下:(defun create_toolbar (/ file lst x)
(vl-load-com)
(if (not (menugroup "NICETOOLBAR"))
    (progn
      (alert "\n程序自动创建\"NICETOOLBAR\"工具栏,请稍后")
      (setq file (open "d:/nice/support/NICETOOLBAR.mnu" "W"))
      (foreach x '(
          "***MENUGROUP=NICETOOLBAR\n\n***TOOLBARS\n**NICETOOLBAR"
          "ID_ZCT001   "
          "ID_ZCT010   ^C^Cnice_insertframe_frame"
          "ID_ZCT011   ^C^Cnice_insertfram_modify"
          "ID_ZCT012   ^C^Cnice_framefillin"
          "ID_ZCT013   ^C^Cnice_framematch"
          "ID_ZCT014   ^C^Cnice_move_frame"
          "ID_ZCT015   ^C^Cnice_numbered"
          "ID_ZCT016   ^C^Cnice_insertdirectory_frame"
          "ID_ZCT017   ^C^Cnice_directorymatch"
          "ID_ZCT018   ^C^Cnice_makediractory_frame"
          "ID_ZCT019   ^C^Cnice_uninstall"
      )
      (princ (strcat x "\n") file)
      )
      (close file)
      (command "menuload" "NICETOOLBAR.mnu")
    )
)
(command "TOOLBAR" "NICE_图框目录工具" "S")
(princ)
)
(defun C:nice_uninstall ()
(alert "即将卸载工具条\n感谢您的使用。\n有任何意见请反馈至kele99kele@163.com\n\n                               by【九群】")
;(command "TOOLBAR" "nice_图框目录工具" "H")
(nice_delpath "D:\\nice\\support")
(nice_delpath "D:\\nice")
(command "CUIUNLOAD" "nicetoolbar")
(princ)
)
(defun nice_delpath (path / temp)
(setq temp (getenv "ACAD"))
(setq temp (vl-string-subst ";" path temp))
(setq temp (vl-string-subst ";" ";;;" temp))
(setq temp (vl-string-subst ";" ";;" temp))
(setenv "ACAD" temp)
)
(defun nice_makpath ()
(setq oldacad (getenv "ACAD")) (princ)
(if (wcmatch oldacad "*D:\\nice\\support*") ()
    (
      (vl-load-com)
      (vl-mkdir "D:\\nice\\support")
      (setq path "D:\\nice;D:\\nice\\support")
      (setenv "ACAD" (strcat oldacad ";" path))
    )   
)
(princ)
)
(nice_makpath)
(create_toolbar)
(load "图框工具.vlx")

edata 发表于 2015-8-10 19:11:49

你是指加载vlx失败吗?
我记得环境变量不能立即生效。

kele99kele 发表于 2015-8-10 20:50:38

edata 发表于 2015-8-10 19:11 static/image/common/back.gif
你是指加载vlx失败吗?
我记得环境变量不能立即生效。

不光加载vlx失败,是提示函数错误,连toolbar也没有加载就退出了,但是第二次appload就全都正常了,实在不知道为什么,第一次失败,第二次成功,而且每次都是一样

llsheng_73 发表于 2015-8-10 23:01:04

如果不设置 环境变量而用CAD系统自己生成一个临时文件名来写可不可能就不会出现这种问题了?

kele99kele 发表于 2015-8-10 23:16:15

llsheng_73 发表于 2015-8-10 23:01 static/image/common/back.gif
如果不设置 环境变量而用CAD系统自己生成一个临时文件名来写可不可能就不会出现这种问题了?

可否指点下是哪句有可能有问题,怎么改可以最大可能的避免这个问题呢?

楚留香 发表于 2015-8-10 23:47:33

vl-mkdir一次只能创建一级目录,
直接用这个   (vl-mkdir "D:\\nice\\support")不能创建
(vl-mkdir "D:\\nice")
(vl-mkdir "D:\\nice\\support")
就可以了


llsheng_73 发表于 2015-8-10 23:56:20

楚留香 发表于 2015-8-10 23:47 static/image/common/back.gif
vl-mkdir一次只能创建一级目录,
直接用这个   (vl-mkdir "D:\\nice\\support")不能创建
(vl-mkdir "D:\ ...

(vl-mkdir "D:\\nice\\support")确实不能创建直接成功。但现在的问题是为什么会第一次出错,第二次就正常

kele99kele 发表于 2015-8-11 00:31:23

llsheng_73 发表于 2015-8-10 23:56 static/image/common/back.gif
(vl-mkdir "D:\\nice\\support")确实不能创建直接成功。但现在的问题是为什么会第一次出错,第二次就正 ...

我好像找到问题了,是不是出在if条件这里
我改成if(progn xxx好像就可以了,你们试试行不行

llsheng_73 发表于 2015-8-11 09:30:05

本帖最后由 llsheng_73 于 2015-8-11 09:38 编辑

kele99kele 发表于 2015-8-11 00:31 http://bbs.mjtd.com/static/image/common/back.gif
我好像找到问题了,是不是出在if条件这里
我改成if(progn xxx好像就可以了,你们试试行不行

(if (wcmatch oldacad "*D:\\nice\\support*") ()
    (
      (vl-load-com)
      (vl-mkdir "D:\\nice\\support")
      (setq path "D:\\nice;D:\\nice\\support")
      (setenv "ACAD" (strcat oldacad ";" path))
    )   
)

这个地方确实有问题。。。同时楚留香提到的问题也应该考虑,最后修改如下
(if(not (wcmatch oldacad "*D:\\nice\\support*") )
    (progn
      (vl-load-com)
      (vl-mkdir "D:\\nice")
      (vl-mkdir "D:\\nice\\support")
      (setq path "D:\\nice;D:\\nice\\support")
      (setenv "ACAD" (strcat oldacad ";" path))
    )   
)
页: [1]
查看完整版本: 请问我这个程序为什么每次加载第一次失败,第二次才能成功呢?