fzg_2000 发表于 2004-3-9 17:26:00

关于如何运用arx有关函数!?急求

在ARX里提供了一些函数与lisp交互


如acedRetInt acedRetT acedRetList


我根椐有关开发手册编写程序,定义ads_command形式的函数


调试无误


但在lisp 里加载出现参数类型错误


也就是这些数据没有返回到lisp以到无法运行!?


是否运用有误!?

ishou 发表于 2004-3-9 17:38:00

LISP程序中调用ARX程序时,ARX程序中的acedRetInt, acedRetT, acedRetList等之类的AcedRetXXX函数,只有在结束ARX程序时最近那个才起作用,而不会逐个返回。

fzg_2000 发表于 2004-3-9 18:29:00

你的意思就是只可传递一个数据喽!?


那么如何实现逐一传递呢!?


谢谢你,能不能更进一步

ishou 发表于 2004-3-9 18:53:00

如果一定要使用acedRetXXX(),可以把要传出的数据暂时并到一条临时的LIST数据链中,最后用acedRetList()把该LIST数据链传到LISP中,再在LISP中把各数据从LIST数据链中分解出来。



还可以使用acedPutSym() 和acedGetSym()两个函数进行ARX与LISP之间直接传递数据。

ishou 发表于 2004-3-9 18:59:00

使用acedPutSym() 和acedGetSym()是方便,但是好象只能与LISP中的全局变量进行传递数据。如何与LISP的局部变量进行传递数据,我还没有试过。

fzg_2000 发表于 2004-3-9 19:42:00

你所说的我试过


能不能给出一点代码

ishou 发表于 2004-3-9 22:27:00

我不知道你在哪部分不清楚,是不是无法从得到的LISP数据链中分离出各组数据?

fzg_2000 发表于 2004-3-9 22:33:00

哈哈,对


如果是用acedRetList,可以用nth 获取取


但是我试过


总是失败,所以才想看看你们是怎么编的

ishou 发表于 2004-3-9 23:34:00

如果是普通的数据并到LIST数据链 Tx,很简单,比如整数,


                                               buf = ads_buildlist(RTLONG,       mynum, 0);


建立一个主结点;


如果是LIST数据链MyList 要并入Tx,必须在数据链MyList的并入处的前、后分别插入RTLB,和 RTLE结点。


比如,现有整数 n,       LIST数据链MyList, 实数r 三组数据:


void       Demo (int n, struct resbuf MyList, ads_real r)<BR>{<BR>               struct resbuf       head=NULL,       end, tmp, p;


<BR>               head = ads_buildlist(RTLONG, n, 0);<BR>               end       = head;


               tmp = ads_buildlist(RTLB, 0);<BR>               end-&gt;rbnext = tmp;<BR>               end = tmp;


               for (p = MyList; p; p=p-&gt;rbnext) {<BR>                                                       tmp = xxx_DupLIst (p);               //把一个结点的数据复制过来,具体实现 (略)<BR>                                                       end-&gt;rbnext = tmp;<BR>                                                       end= tmp;<BR>               }


               tmp = ads_buildlist(RTLE, 0);<BR>               end-&gt;rbnext = tmp;<BR>               end = tmp;


               tmp = ads_buildlist(RTREAL, r, 0);<BR>               end-&gt;rbnext = tmp;<BR>               end = tmp;


               ads_retlist(head);<BR>}


        在LISP中用(nth)就可以依次取出数据。


对于整数,最好用RTLONG,而不要用RTINT,否则可能会使大的整数失真。


我上面是用ADS函数编写,与ARX完全兼容。事实上这样做更为简单些。

fzg_2000 发表于 2004-3-10 13:01:00

谢谢楼上的哥们


关于你编的代码,我试过,那你如何在ARX定义这个函数demo


(弱弱地问。。。。。)
页: [1] 2
查看完整版本: 关于如何运用arx有关函数!?急求