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

想问一下,如何lisp与arx进行数据传递,你采用什么方法!?

想问一下,如何lisp与arx进行数据传递(交互),你采用什么方法!?
我试图用函数(如acedRetReal等函数)的方法来实现
但始终无法运行
你们有什么好的方法!?
版主,好,你能建议一下吗!?

goldenshin 发表于 2004-3-10 16:28:00

放上来帮你看看

goldenshin 发表于 2004-3-10 16:34:00

比如说你在Lisp 中调用
(Setq a (myarx 10))
在Arx中,
1. 定义一个命令myarx
2.在命令myarx中,提取到一个参数10(注意类型RTSHORT)
3.做你的运算,如10*5,返回50
可以用acedRT返回;
最后,Lisp中a就得到50了.

fzg_2000 发表于 2004-3-10 18:56:00

根据你所说的,那参数可要一个一个传递
比喻我要传一个数列,代码如下:
int fzg2()                       //fzg2为ads_defun定义的命令
{               
                       resbuf* pArg = acedGetArgs();
        CGearDialog Dlg;
        short Z;
        double c,Ha,M,a,bb,ds;
                       Z=Dlg.m_nZ;
.......
        res_list=acutBuildList(RTSHORT,Z,
                                                                                                                                                                               RTREAL,c,
                                                                                                                                                                                                       RTREAL,Ha,
                                                                                                                                                                                                       RTREAL,M,
                                                                                                                                                                                                       RTREAL,ds,
                                                                                                                                                                                                       RTREAL,bb,0);
       if(res_list!=NULL){
                                       acdbFail("创建表失败!\n");
                                       return 0;}
               acedRetList(res_list);
               acutRelRb(res_list);
        // TODO: Implement the command
        return RTNORM;
}
在lisp里
(setq mylist (list '0,'0,'0,'0,'0,'0))
(setq aa1 (fzg2 mylist))
setq Z (nth 0 aa1)
        c (nth 1 aa1)
        Ha(nth 2 aa1)
        M (nth 3 aa1)
        ds(nth 4 aa1)
        bb(nth 5 aa1)
错误是; 错误: 无效的数据类型或数据溢出: 0,(autocad命令行提示)
不解,尽请赐教!

goldenshin 发表于 2004-3-11 09:53:00

看不出有多大的错误,思路上是对的.
下面这一句倒是不对       
if(res_list!=NULL){
                                       acdbFail("创建表失败!\n");
return 0;
}
改为if(res_list==NULL)

fzg_2000 发表于 2004-3-11 12:50:00

根据你所说的,我再次试了几次
还是出现上面的错误提示,数据溢出,或类型错误
是不是在lisp的定义方式有误,还在arz里程序不对!?

goldenshin 发表于 2004-3-11 16:28:00

思路是对的,你可能要一点点查,可能有点小错误而已.
页: [1]
查看完整版本: 想问一下,如何lisp与arx进行数据传递,你采用什么方法!?