mochaolong 发表于 2011-3-14 11:56:06

arx 调用 lisp 函数

有时候ARX需要用到内存中运行的LISP函数,可通过acedInvoke函数。

但这里发现一个问题,只能调用LISP中以“C:”开头的函数。有什么办法能调用LISP中自编的普通函数呢并且能返回值。

struct resbuf *result = NULL, *list;
list = acutBuildList(RTSTR,"c:dmsj", RTNONE);
//list = acutBuildList(RTSTR,"alert", RTSTR,"你好世界!",RTNONE);   //调用不以C:开头的函数无反应
    if (list != NULL)
    {
      int stat = acedInvoke(list, &result);
      acutRelRb(list);
    }
    if (result != NULL)
    {
      // Do somthing
      acutRelRb(result);
    }

chpmould 发表于 2011-4-5 10:13:12

同问。。。。

highflybird 发表于 2011-6-18 01:47:40

恐怕需要在lisp前面加上一句:
(vl-acad-defun 'alert) 之类的才可以运行

highflybird 发表于 2011-6-18 01:50:39

本帖最后由 highflybird 于 2011-6-18 01:55 编辑

http://forums.autodesk.com/t5/Autodesk-ObjectARX/Calling-Lisp-from-ObjectArx/td-p/321529
See example:

=========LISP code start==============
(defun LispFunction ( prl )
(princ prl)
)
;
; If you want to be able to invoke this function from an external ObjectARX
; application, you can use vl-acad-defun to make the function accessible.
;
(vl-acad-defun 'LispFunction)
=========LISP code end===============

=========C++ code start==============
int ads_call_lisp_function(void)
{
char *output_line = "\nHello, Lisp!!!";
resbuf *rb_in = acutBuildList(RTSTR,"LispFunction",
RTSTR,output_line,RTNONE);
resbuf *rb_out = NULL;
int rc = acedInvoke(rb_in,&rb_out);
acutRelRb(rb_in); acutRelRb(rb_out);
return (RSRSLT) ;
}


chpmould 发表于 2011-6-18 08:54:22

本帖最后由 chpmould 于 2011-6-18 09:01 编辑

按楼上的方法可以调用不带参的LISP,但是不知能否做到调用LISP中带参的子程序...

highflybird 发表于 2011-6-18 10:34:32

本帖最后由 highflybird 于 2011-6-18 10:47 编辑

回复 chpmould 的帖子

楼上还没看明白吗?这个已经是调用带参的lisp程序啊。
首先用vl-acad-defun'LispFunction --->定义要调用的lisp函数给arx用。

resbuf *rb_in = acutBuildList(RTSTR,"LispFunction",RTSTR,output_line,RTNONE);


构建表,
RTSTR,lispfunction -函数名字,可以是自编的,也可以是lisp的其他一些函数。
第二个----RTSTR,参数类型, output_line取决于你的参数类型。
因为实例中只有一个参数,所以后面就加RTNONE结束了。
如果多个的话,就要按照格式
int参数类型, 参数.....
最后加RTNONE结束

然后acedInvoke;
具体用法请参考说明和帮助。或者google

chpmould 发表于 2011-6-18 12:03:41

highflybird 发表于 2011-6-18 10:34 static/image/common/back.gif
回复 chpmould 的帖子

楼上还没看明白吗?这个已经是调用带参的lisp程序啊。


谢谢你的指导,刚才确实没有看懂,现经你的指导总算是明白了

天意今天 发表于 2011-7-1 09:10:50

用sendStringToExecute传一个整字符串进去
页: [1]
查看完整版本: arx 调用 lisp 函数