我有很少的.arx应用程序用于AutoCAD。在这些应用程序中,很少是基于菜单的,其他是命令行。现在我要做的是,
现在我有一个lisp文件,一旦用户启动AutoCAD就会加载。在lisp文件中,我已经为各种.arx应用程序声明了这些函数;
(defun c:XYZ_program()(命令)(命令)(arxload“C:/ABC/XYZ.arx”)(命令“XYZ_program”)(arxunload“XYZ.arx”))
它适用于需要来自基于菜单的表单的输入数据的程序,但是对于需要命令行输入的程序说错误卸载xyz.arx。
我想知道LISP中是否有任何命令可以确保arxunload“XYZ.arx”只执行一次(命令“XYZ_program”)。
我不确定如何解决这个问题。对此有任何帮助将不胜感激。
我目前使用的代码就是这个 ;
(
defun c:XYZ_program() (command) (command)
(arxload "C:/Example/Folder/XYZ.arx")
(command "XYZ_program")
ads_queueexpr( (arxunload "XYZ.arx") )
)
答案 0 :(得分:1)
(defun c:Load()
(arxload "the\\file\\path")
; run the app
)
试试这个:
(arxload "C:/ABC/XYZ.arx" nil)
(defun c:XYZ_program()
(command)
(command)
(command "XYZ_program")
(arxunload "XYZ.arx" nil)
);
祝你好运。
答案 1 :(得分:1)
从您的问题中不清楚,但听起来模块无法卸载,因为它正在主动执行等待用户输入的命令。所以,我想你问的是如何推迟卸载,直到命令执行完毕。这个问题的答案是使用ads_queueexpr()从命令本身中排队(arxunload“XXX”)函数。
但是,您通过尝试卸载模块为自己创建了更大的问题。卸载需要时间,因此它肯定无助于性能。解决问题的正确方法是不卸载模块并将卸载留给AutoCAD。