这个问题能解决吗?关于参数的
我的LISP程序:(defun add10(x)<BR> (+ 10 x)<BR> )
在ARX中通过一个按钮来调用此程序,代码是:
AcApDocument * pDoc=acDocManager->curDocument();<BR> CString str= "(add10 x)\n";<BR> acDocManager->sendStringToExecute(pDoc,str);
其中参数x的值我想通过一个编辑框输入,然后x就能被赋予输入的数,高手和版主看看可以实现吗?比如x输入10,点击按钮后AUTOCAD便返回20。
这样能实现吗? 你直接用字符串连接起来发出去就好 楼主偶有一个疑问..你一定, 非得, 不得不用ARX调用LISP程序吗?
ARX是为C++环境开发的端口, 意思就是你不要用LISP而要用C++做事..用ARX调用LISP完全是LISP程序太多无法快速转换到C++而使用的下下策..
非得用ARX调用LISP的程序的话, 这个版上搜索LISP就可以找到怎么做..
在C++下要实现按按钮为变量+10的功能, 为对话框写一个On**Button函数就可以了. (楼主请不要说你的对话框是DCL的不是C++的, 如果那样的话偶实在劝你就用LISP不要折腾ARX就好了..) 对啊,我就得用ARX来调LISP程序,因为以前很多画图的程序都是用LISP写的,现在想直接调用,不想再改了,嘿嘿!!
我还是有些没明白你们的意思,能详细说一下吗?
小弟刚学ARX,很多东西不明白,请多见谅!! ARX的应用方向似乎很不对头哪..
它本来不是一个专门从C++叫LISP的东西..
至于楼主的问题, 这样解决:
LISP: 在程序后头加(vl-acad-defun 'add10), 这样ARX才认识你的LISP程序.
ARX:
对话框里用C++ class wizard添加一个和编辑框对应的变量,比如说是m_iEdit. 再添加一个按钮的OnBtn (message = BN_CLICKED)函数, 函数内部指令如下:
int x = m_iEdit; // 直接用m_iEdit到下面也是可以
resbuf* rb_in = acutBuildList (RTSTR, "add10", RTSHORT, x, RTNONE);
resbuf* rb_out = NULL;
acedInvoke (rb_in, &rb_out);
然后rb_out里面就会存有结果了, 取出来就好. (楼主应该至少懂怎么用result buffer吧?)
但是偶还是不得不说, 如果只是这样一句话的LISP, 转到C++会很难吗..实际上只要在OnBtn函数里写和LISP里同样的一句话就行了..
m_iEdit += 10;
然后AutoCAD直接读取m_iEdit就可以了.. 谢谢大侠赐教,不过楼上的那些好像在无模对话框下不能正常运行,你看看是吗?
我的不行,真是不好意思,再帮我看看。
h2023197发表于2005-3-16 11:23:00static/image/common/back.gif谢谢大侠赐教,不过楼上的那些好像在无模对话框下不能正常运行,你看看是吗?
<BR>无模对话框和能不能运行按钮函数无关啊, 只要你有正确的focus..
你的无模对话框下不能正常运行, 是对话框可以正常操作(包括显示, 隐藏, 再显示, 关闭)但按按钮没有反应/跳出错误, 还是对话框就有问题? 在模式对话框下可以运行啊,在无模下会跳出错误啊!!
“;错误:invalid AutoCAD command: nil”
这是啥原因啊? h2023197发表于2005-3-16 19:38:00static/image/common/back.gif在模式对话框下可以运行啊,在无模下会跳出错误啊!!
“;错误:invalid AutoCAD command: nil”
这是啥原因啊?
<BR>偶试过了没问题啊, 你的无模式对话框有没有设keepFocus的?
现在还是不知道到底是对话框的问题还是ARX的问题, 楼主你可不可以用debugger看一下到底哪一句指令造成这种错误的啊? 至少说一下你运行对话框的情况然后做了什么事情致使跳出这个错误, 光说跳出错误天知道是什么地方错了啊.. 应该是acedInvoke (rb_in, &rb_out);这句出错了,我的无模对话框设keepFocus了,当在AUTOCAD加载后,调出对话框后点击按钮,就会出现我说的那个错了!!!
页:
[1]
2