用LISP加载和卸载.arx文件



我有一些适用于AutoCAD的.arx应用程序。在这些应用程序中,很少有基于菜单的应用程序,而其他应用程序则是命令行的。现在我要做的是,

  1. 加载.arx应用程序
  2. 运行它,然后
  3. 一旦.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) 
);

祝你好运。

相关内容

  • 没有找到相关文章

最新更新