乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 134|回复: 9

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

[复制链接]

5

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-3-9 17:26:00 | 显示全部楼层 |阅读模式
在ARX里提供了一些函数与lisp交互
如acedRetInt acedRetT acedRetList
我根椐有关开发手册编写程序,定义ads_command形式的函数
调试无误
但在lisp 里加载出现参数类型错误
也就是这些数据没有返回到lisp以到无法运行!?
是否运用有误!?
回复

使用道具 举报

2

主题

37

帖子

3

银币

初来乍到

Rank: 1

铜币
45
发表于 2004-3-9 17:38:00 | 显示全部楼层
LISP程序中调用ARX程序时,ARX程序中的acedRetInt, acedRetT, acedRetList等之类的AcedRetXXX函数,只有在结束ARX程序时最近那个才起作用,而不会逐个返回。
回复

使用道具 举报

5

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-3-9 18:29:00 | 显示全部楼层
你的意思就是只可传递一个数据喽!?
那么如何实现逐一传递呢!?
谢谢你,能不能更进一步
回复

使用道具 举报

2

主题

37

帖子

3

银币

初来乍到

Rank: 1

铜币
45
发表于 2004-3-9 18:53:00 | 显示全部楼层
如果一定要使用acedRetXXX(),可以把要传出的数据暂时并到一条临时的LIST数据链中,最后用acedRetList()把该LIST数据链传到LISP中,再在LISP中把各数据从LIST数据链中分解出来。 还可以使用acedPutSym() 和acedGetSym()两个函数进行ARX与LISP之间直接传递数据。
回复

使用道具 举报

2

主题

37

帖子

3

银币

初来乍到

Rank: 1

铜币
45
发表于 2004-3-9 18:59:00 | 显示全部楼层
使用acedPutSym() 和acedGetSym()是方便,但是好象只能与LISP中的全局变量进行传递数据。如何与LISP的局部变量进行传递数据,我还没有试过。
回复

使用道具 举报

5

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-3-9 19:42:00 | 显示全部楼层
你所说的我试过
能不能给出一点代码
回复

使用道具 举报

2

主题

37

帖子

3

银币

初来乍到

Rank: 1

铜币
45
发表于 2004-3-9 22:27:00 | 显示全部楼层
我不知道你在哪部分不清楚,是不是无法从得到的LISP数据链中分离出各组数据?
回复

使用道具 举报

5

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-3-9 22:33:00 | 显示全部楼层
哈哈,对
如果是用acedRetList,可以用nth 获取取
但是我试过
总是失败,所以才想看看你们是怎么编的
回复

使用道具 举报

2

主题

37

帖子

3

银币

初来乍到

Rank: 1

铜币
45
发表于 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)
{
                 struct resbuf         head=NULL,         end, tmp, p;
                 head = ads_buildlist(RTLONG, n, 0);
                 end         = head;
                 tmp = ads_buildlist(RTLB, 0);
                 end->rbnext = tmp;
                 end = tmp;
                 for (p = MyList; p; p=p->rbnext) {
                                                         tmp = xxx_DupLIst (p);                 //把一个结点的数据复制过来,具体实现 (略)
                                                         end->rbnext = tmp;
                                                         end= tmp;
                 }
                 tmp = ads_buildlist(RTLE, 0);
                 end->rbnext = tmp;
                 end = tmp;
                 tmp = ads_buildlist(RTREAL, r, 0);
                 end->rbnext = tmp;
                 end = tmp;
                 ads_retlist(head);
}
        在LISP中用(nth)就可以依次取出数据。
对于整数,最好用RTLONG,而不要用RTINT,否则可能会使大的整数失真。
我上面是用ADS函数编写,与ARX完全兼容。事实上这样做更为简单些。
回复

使用道具 举报

5

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-3-10 13:01:00 | 显示全部楼层
谢谢楼上的哥们
关于你编的代码,我试过,那你如何在ARX定义这个函数demo
(弱弱地问。。。。。)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 16:37 , Processed in 0.211620 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表