*error*函数在CAD2014中还有没有作用
[*](defun *myerr*(msg)
[*](alert "yxl")
[*](princ "aaaaaaaaaa")
[*](setq *error* olderr)
[*])
[*]
[*](defun C:t1()
[*](setq olderr *error* *error* *myerr*)
[*](repeat 10000
[*] (command "line" '(0 0) '(100 100) "")
[*])
[*](setq *error* olderr)
[*])
[*];;试了很多种写法。按esc不会自动调用,变量没法恢复。感觉上面写法再简单不过了,结果都是一点反应都没有。论坛找了好多处理方法,结果一个样没反应。是不是这个函数已经废除了
*error* 是在意外中断的情况下才执行的
(defun *myerr* (msg) (alert "yxl") (princ msg) (princ "\naaaaaaaaaa") (setq *error* olderr))
(defun c:t1 ()
(setq olderr *error*
*error* *myerr*
)
(command "line" '(100 100) pause)
(setq *error* olderr)
)
你执行上面的代码 然后按ESC你就会知道了 如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到你想要的结果
wen1235 发表于 2019-11-25 14:44
如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到 ...
请问程序执行结束后按esc退出程序(因为自己做的程序是死循环,只能按esc退出),该怎么写错误处理,自己写的没任何作用。每次按esc退出,系统变量都不能自动恢复,求教谢谢 (defun C:tt (/ *error* error_bak)
(defun t-*error* (msg)
(setq *error* error_bak)
(alert "错误函数成功")
)
(setq error_bak *error*)
(setq *error* t-*error*)
(getpoint)
(setq *error* error_bak)
) czww26 发表于 2019-12-5 12:50
请问程序执行结束后按esc退出程序(因为自己做的程序是死循环,只能按esc退出),该怎么写错误处理,自己写 ...
你要说清楚啊 如果是变量没恢复的话 你的程序中本来就没有恢复变量的代码 怎么会还原呢 你可这样测试 把下面代码存为文件 关了CAD 再开CAD就不要在打开VLISP调试器了 你用手动加载刚才的文件执行 按退出 你就明白了
(defun c:t1 ()
(defun *myerr* (msg)
(mapcar 'eval sysvarlst) ;;恢复变量值
(alert "yxl")
(princ msg)
(princ "\naaaaaaaaaa")
(setq *error* olderr)
)
(setq olderr *error*
*error* *myerr*
)
(setq sysvarlst (mapcar (function (lambda (n) (list 'setvar n (getvar n)))) ;;先取改变前的变量名和值保存
'("osmode" "cmdecho" "orthomode" "osnapcoord" "textsize")
)
)
(setvar "osmode" 0) ;改变变量值
(repeat 10000
(command "line" '(0 0) '(100 100) "")
)
(mapcar 'eval sysvarlst) ;;恢复变量值
(setq *error* olderr)
) wen1235 发表于 2019-12-5 14:01
你要说清楚啊 如果是变量没恢复的话 你的程序中本来就没有恢复变量的代码 怎么会还原呢 你可这样测试 ...
感谢分享方法,确实有效,十分感谢 感谢大佬分享
页:
[1]