0

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

  1. 加载 .arx 应用程序,
  2. 运行它然后
  3. 一旦 .arx 应用程序通过 LISP 命令运行,就卸载它。一旦用户单击提供的选项卡,.arx 应用程序就会运行。.arx 应用程序是用 VC++ 编写的。

现在我有一个 lisp 文件,一旦用户启动 AutoCAD,它就会被加载。在 lisp 文件中,我为各种 .arx 应用程序声明了这些函数;

(defun c:XYZ_program() (command) (command) (arxload "C:/ABC/XYZ.arx") (command "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") ) 
)
4

2 回答 2

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) 
);

祝你好运。

于 2013-07-12T13:42:27.280 回答
1

您的问题尚不清楚,但听起来模块无法卸载,因为它正在积极执行等待用户输入的命令。所以,我想你是在问如何推迟卸载,直到命令完成执行。该问题的答案是使用 ads_queueexpr() 从命令本身对 (arxunload "XXX") 函数进行排队。

但是,尝试卸载模块会给自己带来更大的问题。卸载需要时间,所以它肯定对性能没有帮助。您的问题的正确解决方案是不卸载您的模块并将卸载留给 AutoCAD。

于 2013-07-15T02:34:08.087 回答