关于如何运用arx有关函数!?急求
在ARX里提供了一些函数与lisp交互如acedRetInt acedRetT acedRetList
我根椐有关开发手册编写程序,定义ads_command形式的函数
调试无误
但在lisp 里加载出现参数类型错误
也就是这些数据没有返回到lisp以到无法运行!?
是否运用有误!? LISP程序中调用ARX程序时,ARX程序中的acedRetInt, acedRetT, acedRetList等之类的AcedRetXXX函数,只有在结束ARX程序时最近那个才起作用,而不会逐个返回。 你的意思就是只可传递一个数据喽!?
那么如何实现逐一传递呢!?
谢谢你,能不能更进一步 如果一定要使用acedRetXXX(),可以把要传出的数据暂时并到一条临时的LIST数据链中,最后用acedRetList()把该LIST数据链传到LISP中,再在LISP中把各数据从LIST数据链中分解出来。
还可以使用acedPutSym() 和acedGetSym()两个函数进行ARX与LISP之间直接传递数据。 使用acedPutSym() 和acedGetSym()是方便,但是好象只能与LISP中的全局变量进行传递数据。如何与LISP的局部变量进行传递数据,我还没有试过。 你所说的我试过
能不能给出一点代码 我不知道你在哪部分不清楚,是不是无法从得到的LISP数据链中分离出各组数据? 哈哈,对
如果是用acedRetList,可以用nth 获取取
但是我试过
总是失败,所以才想看看你们是怎么编的 如果是普通的数据并到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->rbnext = tmp;<BR> end = tmp;
for (p = MyList; p; p=p->rbnext) {<BR> tmp = xxx_DupLIst (p); //把一个结点的数据复制过来,具体实现 (略)<BR> end->rbnext = tmp;<BR> end= tmp;<BR> }
tmp = ads_buildlist(RTLE, 0);<BR> end->rbnext = tmp;<BR> end = tmp;
tmp = ads_buildlist(RTREAL, r, 0);<BR> end->rbnext = tmp;<BR> end = tmp;
ads_retlist(head);<BR>}
在LISP中用(nth)就可以依次取出数据。
对于整数,最好用RTLONG,而不要用RTINT,否则可能会使大的整数失真。
我上面是用ADS函数编写,与ARX完全兼容。事实上这样做更为简单些。 谢谢楼上的哥们
关于你编的代码,我试过,那你如何在ARX定义这个函数demo
(弱弱地问。。。。。)
页:
[1]
2