(求助)反应器中使用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
c:xx是可以取消的!
(setq c:xx nil)
(vl-acad-undefun 'c:xx) 飞诗(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]