tengte 发表于 2011-11-1 14:34:12

(求助)反应器中使用vlax-add-cmd函数时出错!!

在文档反应器中使用vlax-add-cmd函数时,出现错误如下:
; error: Exception occurred: 0xC0000005 (Access Violation)
; warning: unwind skipped on exception
; error: Exception occurred: 0xC0000005 (Access Violation)

  我有一个想法:对不同的文档能自定义相应的命令(不同文档间,相同的命令有不同的含义)。最先的想法是用“C:X”,但定义后不能取消,故只能使用vlax-add-cmd,然而又有一个新的问题,vlax-add-cmd添加的命令是全部文档有效的。因而,想到了用反应器,激活文档时加载相应的命令,离开文档时移除相应的命令。
  为了实现这个思路,写了如下的测试代码。但测试时出现了上述问题,请高手指点!谢谢!!

(defun Test () (print "Test"))
(defun DocReactor (Reactor Datas / do Event Layer)
(setq Event (vlr-current-reaction-name))
(princ Event)
(cond
    ((= Event ':vlr-DocumentToBeActivated)
   (prompt "\n进入\n")
   (vlax-add-cmd "TT" 'Test)
    )
    ((= Event ':vlr-DocumentToBeDeactivated)
   (prompt "\n离开\n")
   (vlax-remove-cmd "TT")
    )
) ;cond
) ;defun
(defun RunReactor (bStart / GetReactor name Reactor)
(defun GetReactor (name / i Reactor Reactors Datas)
    (setq Reactors (cdr (car (vlr-reactors ':VLR-DocManager-Reactor)))
   Datas    (mapcar 'vlr-data Reactors)
   i    (vl-position name Datas)
    )
    (if i
      (setq Reactor (nth i Reactors))
    )
    Reactor
) ;defun
(setq name "DocReactor"
Reactor (GetReactor name)
)
(if bStart
    (if (not Reactor)
      (vlr-docmanager-reactor
name
'((:vlr-DocumentToBeActivated . DocReactor)
   (:vlr-DocumentToBeDeactivated . DocReactor)
)
      )
    ) ;if/else
    (and (setq Reactor (GetReactor name))
(vlr-remove Reactor)
    )
) ;if
) ;defun

飞诗(fsxm) 发表于 2011-11-1 15:01:52

c:xx是可以取消的!
(setq c:xx nil)
(vl-acad-undefun 'c:xx)

tengte 发表于 2011-11-1 17:06:30

飞诗(fsxm) 发表于 2011-11-1 15:01 static/image/common/back.gif
c:xx是可以取消的!
(setq c:xx nil)
(vl-acad-undefun 'c:xx)

谢谢,以前没有用过这个函数,试了试,好像可以满足的我要求!
但反应器中可以使用vlax-add-cmd函数吗?要怎么用呢?
页: [1]
查看完整版本: (求助)反应器中使用vlax-add-cmd函数时出错!!