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

请教一下,ads_defun用来作什么!?(迫切了解)

在objectARX defuned command (向导工具条cmd)


提供了两种注册命令方式


一个是addcommand 一个是ads_defun,那么


ads_defun用来作什么,如果使ads_defun创建的命令,如何使用命令


(我试过addcommand可以直接以命令形式使用,而ads_defun不执行)

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

在Lisp中使用

fzg_2000 发表于 2004-3-10 19:03:00

根据你所说的,我建一个命令adscmd


并返回给lisp一个值


int adscmd()<BR>{<BR>        // TODO: Implement the command<BR>        resbuf* pArg = acedGetArgs();


int z=6;


acedRetInt(Z);


        return RTNORM;<BR>}


这种编译无误,但在lisp却接收不到这个值Z


(setq zz (adscmd z))(当然在用时加载arx程序)


是不是别的问题,还是我编程有误,望尽详言



<BR>

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

你用(setq zz       (adscmd))后


zz应当等于6

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

; 错误: no function definition: adscmd


实在想不通,定义的是函数,且是命令


而在lisp却执行的不是命令!?

goldenshin 发表于 2004-3-11 13:13:00

上面的例子肯定可以通过,


再试试吧.

fzg_2000 发表于 2004-3-11 14:10:00

谢谢版主指导,我重试了一下,没有问题,


由于我设定的Z值


是从另外一个类中引入的数据(class CGearDialog : public CDialog)


int cmdz()// This is command 'CMDZ'<BR>{CGearDialog Dlg;<BR>        // TODO: Implement the command<BR>        resbuf* pArg = acedGetArgs();<BR>        int Z;<BR>                Z=Dlg.m_nZ;//m_nZ整型数据<BR>        acedRetInt(Z);<BR>        return RTNORM;<BR>}


这个从CGearDialog引入的数并没有传递过去,


同样,如果我将一个数从lisp里返回到ARX


建立ads_defun的数据又作何处理!?(再次谢过)

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

看到resbuf* pArg = acedGetArgs();


你要做的只是从pArg中提数据,


你从Lisp传过来的所有数据(不管是List还是单个的数),都在pArg里了.


       


欢迎常来

fzg_2000 发表于 2004-3-11 17:53:00

resbuf* pArg = acedGetArgs();这些代码是自动生成的


在创建的命令里,想从别的类中引入值,结果并没有引入值


正如上面的代码的所述,


还请版主再次指点一二

goldenshin 发表于 2004-3-12 08:49:00

那是你的类CGearDialog有问题.
页: [1] 2
查看完整版本: 请教一下,ads_defun用来作什么!?(迫切了解)