使用LISP加载和卸载.arx文件

时间:2013-07-11 20:04:04

标签: visual-c++ lisp autocad autodesk autolisp

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

  1. 加载.arx应用
  2. 运行它然后
  3. 在.arx应用程序通过LISP命令运行后卸载它。 一旦用户单击提供的选项卡,就会运行.arx应用程序。 .arx应用程序是用VC ++编写的。
  4. 现在我有一个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") ) 
    )
    

2 个答案:

答案 0 :(得分:1)

http://docs.autodesk.com/ACD/2013/ENU/index.html?url=files/GUID-3FF72BD0-9863-4739-8A45-B14AF1B67B06.htm,topicNumber=d30e502824

(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。