czww26 发表于 2019-11-24 23:01:52

*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不会自动调用,变量没法恢复。感觉上面写法再简单不过了,结果都是一点反应都没有。论坛找了好多处理方法,结果一个样没反应。是不是这个函数已经废除了

wen1235 发表于 2019-11-25 14:04:44

  *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你就会知道了

wen1235 发表于 2019-11-25 14:44:24

如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到你想要的结果

czww26 发表于 2019-12-5 12:50:35

wen1235 发表于 2019-11-25 14:44
如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到 ...

请问程序执行结束后按esc退出程序(因为自己做的程序是死循环,只能按esc退出),该怎么写错误处理,自己写的没任何作用。每次按esc退出,系统变量都不能自动恢复,求教谢谢

taoyi0727 发表于 2019-12-5 13:25:13

(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)
)

wen1235 发表于 2019-12-5 14:01:26

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)
)

tianying307 发表于 2020-8-9 13:54:14

wen1235 发表于 2019-12-5 14:01
你要说清楚啊 如果是变量没恢复的话 你的程序中本来就没有恢复变量的代码 怎么会还原呢 你可这样测试 ...

感谢分享方法,确实有效,十分感谢

magicheno 发表于 2022-8-19 12:52:29

感谢大佬分享
页: [1]
查看完整版本: *error*函数在CAD2014中还有没有作用