首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用LISP加载和卸载.arx文件

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

Stack Overflow用户
提问于 2013-07-11 20:04:04
回答 2查看 2.6K关注 0票数 1

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

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

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

( c:XYZ_program()命令)(命令) (arxload "C:/ABC/XYZ.arx") (命令"XYZ_program") (arxunload "XYZ.arx")

对于需要从基于菜单的表单输入数据的程序,它可以正常工作,但是对于需要命令行输入的程序,它可以错误地卸载xyz.arx。

我想知道LISP中是否有确保arxunload "XYZ.arx“只执行一次(命令"XYZ_program")的命令。

我不知道如何处理这个问题。如果有同样的帮助,我们将不胜感激。

我目前使用的代码是这样的;

代码语言:javascript
复制
(
  defun c:XYZ_program() (command) (command)
   (arxload "C:/Example/Folder/XYZ.arx") 
   (command "XYZ_program") 
   ads_queueexpr( (arxunload "XYZ.arx") ) 
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-15 02:34:08

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

但是,通过卸载模块,您正在为自己制造更大的问题。卸载需要时间,因此它肯定无助于性能的提高。解决问题的正确方法是不卸载模块并将卸载留给AutoCAD。

票数 1
EN

Stack Overflow用户

发布于 2013-07-12 13:42:27

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

代码语言:javascript
复制
(defun c:Load()
    (arxload "the\\file\\path")
    ; run the app
)

试试这个:

代码语言:javascript
复制
(arxload "C:/ABC/XYZ.arx" nil) 

(defun c:XYZ_program() 
    (command) 
    (command)
    (command "XYZ_program")
    (arxunload "XYZ.arx" nil) 
);

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17602443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档