我有一些适用于AutoCAD的.arx应用程序。在这些应用程序中,很少有基于菜单的应用程序,而其他应用程序则是命令行的。现在我要做的是,
- 加载.arx应用程序
- 运行它,然后
- 一旦.arx应用程序通过LISP命令运行,就卸载它。.arx应用程序在用户单击提供的选项卡后运行。.arx应用程序是用VC++编写的
现在我有了一个lisp文件,一旦用户启动AutoCAD,就会加载该文件。在lisp文件中,我为各种.arx应用程序声明了这些函数;
(defun c:XYZ_program()(命令)(命令
它适用于需要从基于菜单的表单输入数据的程序,但表示卸载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") )
)
您的问题还不清楚,但听起来模块无法卸载,因为它正在积极执行等待用户输入的命令。所以,我想你是在问如何推迟卸载,直到命令执行完毕。这个问题的答案是使用ads_queueexpr()从命令本身中对(arxunload"XXX")函数进行排队。
然而,试图卸载模块会给自己带来更大的问题。卸载需要时间,所以它肯定对性能没有帮助。解决问题的正确方法是不卸载模块,而是将卸载留给AutoCAD。
http://docs.autodesk.com/ACD/2013/ENU/index.html?url=files/GUID-3FF72BD0-9863-4739-8A45-B14AF1B67B06.htm,主题编号=d30e50224
(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)
);
祝你好运。