請教下高手ARX和LISP程序調用的問題
本帖最后由 作者 于 2004-10-11 8:46:21 编辑谢谢 我也遇到这样的问题了,但没有一个高手会,你后面的LISP程序是这样的:
<P class=prompt>Command:<!--emsp--> (setq testboole t)
<P class=prompt>T
<P class=prompt>Command:<!--emsp--> (setq teststr "HELLO, WORLD")
<P class=prompt>"HELLO, WORLD"
<P class=prompt>Command:<!--emsp--> (setq sset1 (ssget))
<P class=prompt_end><Selection set: 1>
<P class=prompt_end>而且这些东西必须先註册过.否则上面的代码不能用. 版主都说过了,呵呵,引用一下:
int call_lisp_function(void)<BR>{<BR> resbuf *rb_in = acutBuildList(RTSTR,"myfun",RTNONE);<BR> resbuf *rb_out = NULL;<BR> int rc = acedInvoke(rb_in,&rb_out);<BR> acutRelRb(rb_in); acutRelRb(rb_out);<BR> acedGetSym("myfunret",&rb_out);<BR> return (RSRSLT) ;<BR><FONT color=#660066>}</FONT><BR> 本帖最后由 作者 于 2004-10-11 8:45:49 编辑 <br /><br /> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3>谢谢<FONT face="Times New Roman">!</FONT></FONT> 上次的问题怎么解决的?
以下是上次的程序:
const char * str;<BR>str = "(defun dtr(a) (* a ( / Pi 180.0))) ";<BR>acDocManager->sendStringToExecute(pAcTargetDocument,str,false); //向CAD发送LISP字符串<BR>acDocManager->sendStringToExecute(pAcTargetDocument,"(vl-acad-defun 'dtr) ",false); //函数註册<BR>int stat; <BR>int x = 180; <BR>struct resbuf *result = NULL; <BR>struct resbuf *list; <BR>list = acutBuildList(RTSTR, "dtr", RTSHORT, x, RTNONE);<BR>if (list != NULL) <BR>{ stat = acedInvoke(list, &result); <BR> acutRelRb(list); <BR>} <BR> if (result != NULL) <BR>{ acutPrintf("\nSuccess: dtr of %d is %f\n", x, result->resval.rreal); <BR> acutRelRb(result); <BR>} <BR>else <BR>acutPrintf("Test failed\n");<BR>结果运行的结果是这样的:<BR>第一次是这样的.<BR>Command: ff Test failed<BR>Command: (defun dtr(a) (* a ( / Pi 180.0))) DTR<BR>Command: (vl-acad-defun 'dtr) 2085<BR>以后运行结果是这样的:<BR>Command: ff<BR>Success: dtr of 180 is 3.141593<BR>Command: (defun dtr(a) (* a ( / Pi 180.0))) DTR<BR>Command: (vl-acad-defun 'dtr) 2085<BR>问题:第一次执行失败,以后就对了,是不是LISP函数註册的问题呀?还是命令栈后进先出的问题,<BR>总之第一次运行就不正确,你帮著看下有什么好的解决办法,谢谢!<BR>
页:
[1]