明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2060|回复: 1

[函数] 复制了G版的出错处理码,运行提示函数有错,帮看一下为什么?

[复制链接]
发表于 2013-3-31 13:58:01 | 显示全部楼层 |阅读模式
本帖最后由 kwok 于 2013-3-31 14:01 编辑

复制了码测试了后提示函数有错,提示:错误: *error* 函数中出错参数类型错误: (or stringp symbolp): nil
俺弄不明白,帮看看为什么?
下面是G版的出错处理源码.
;;例3:自定义通用错误处理初始化函数
;;(gxl-error-init syslst) 初始化*error*
;;;功能:保存syslst给定的系统变量值,并按表给定的系统变量值设置系统变量
;;; 参数 syslst 系统变量及其设置值列表 例如: '("osmode" 0 "cmdecho" 0  "cecolor" "1")
(vl-load-com)
(defun gxl-error-init1 (syslst fun UndoMode / sysname sysvar)
  (setq *olderror* *error*
    *Function* fun
    *UndoMode* UndoMode
  )
  (defun *error* (msg / sysname sysvar)
    (if (= 2 *UndoMode*)
      (progn
    (if (= 8 (logand (getvar “undoctl”) 8))
      (command “_undo” “_e”)
    )
    (command “_U”)
      )
      (progn
    (if *sysvarInit*
      (while (and (setq sysname (car *sysvarInit*))
              (setq sysvar (cadr *sysvarInit*))
         )
        (setq *sysvarInit* (cddr *sysvarInit*))
        (setvar sysname sysvar)
      )
    )
    (if *Function* (VL-CATCH-ALL-APPLY *Function*)) ;_执行函数
    (if (= *UndoMode* 1)
      (if (= 8 (logand (getvar “undoctl”) 8))
        (command “_undo” “_e”)
      )
    )
      )
    )
    (setq *error* *olderror*
      *olderror* nil
      *Function* nil
      *UndoMode* nil
    )
    (or (wcmatch (strcase msg) “*BREAK,*CANCEL*,*EXIT*”)
    (princ (strcat “\n** Error: ” msg ” **”))
    )
  )

  (if (or (= *UndoMode* 1) (= *UndoMode* 2))
    (progn
      ;;如果有活动编组,先结束编组
      (if (= 8 (logand (getvar “undoctl”) 8))
    (command “_undo” “_e”)
      )
      (command “_undo” “_BE”) ;_ 编组开始
    )
  )
  (if syslst
    (while (and (setq sysname (car syslst))
        (setq sysvar (cadr syslst))
       )
      (setq *sysvarInit*
         (append *sysvarInit*
             (list sysname (getvar sysname))
         )
      )
      (setq syslst (cddr syslst))
      (setvar sysname sysvar)
    )
  )
  (princ)
)
;;;自定义通用错误处理恢复函数
;;(gxl-error-end) 恢复*error*
(defun   gxl-error-end ()
     (if (= 8 (logand (getvar "undoctl") 8))
     (command "_undo" "_e")
   )
   (if *olderror*
     (setq *error* *olderror*
       *olderror* nil
     ) ;_ 恢复*error*函数
   )
   (if *sysvarInit* ;_ 恢复储存的系统变量
     (while (and (setq sysname (car *sysvarInit*))
         (setq sysvar (cadr *sysvarInit*))
        )
       (setq *sysvarInit* (cddr *sysvarInit*))
       (setvar sysname sysvar)
     )
   )
   (setq *Function* nil
     *UndoMode* nil
   )
   (princ)
)

(defun c:tt4()
  (gxl-error-init1 (list ‘blipmode 0 ‘cmdecho 0 ‘osmode 0) ‘tt1 2) ;_ 出错只编组
  (defun tt1 ()  ;_ 出错后*error*要执行的动作
    (alert “出错啦!”)
    )
      ;;;主程序内容
     (setq p1 (getpoint "\n输入第一点: ")
          P2 (getpoint  p1 "\n输入第二点: ")
          P3 (getpoint  p2  "\n输入第三点: ")
       )
     (vl-cmdf "_.pline" p1 p2 p3"c")

(gxl-error-end)
(princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-5-2 23:08:29 | 显示全部楼层
本帖最后由 1993063 于 2013-5-2 05:14 编辑

是全角半角的问题
刚试了下,正是 “ ” 问题   (if (= 8 (logand (getvar “undoctl”) 8))  从这时开始错,一直到下面

评分

参与人数 1明经币 +1 收起 理由
kwok + 1 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-22 20:43 , Processed in 0.182198 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表