明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1808|回复: 4

請教下高手ARX和LISP程序調用的問題

[复制链接]
发表于 2004-9-22 10:08:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2004-10-11 8:46:21 编辑

谢谢
发表于 2004-9-22 10:21:00 | 显示全部楼层
我也遇到这样的问题了,但没有一个高手会,你后面的LISP程序是这样的:

Command: (setq testboole t)

T

Command: (setq teststr "HELLO, WORLD")

"HELLO, WORLD"

Command: (setq sset1 (ssget))

<Selection set: 1>

而且这些东西必须先註册过.否则上面的代码不能用.

发表于 2004-10-5 16:31:00 | 显示全部楼层
版主都说过了,呵呵,引用一下: int call_lisp_function(void)
{
resbuf *rb_in = acutBuildList(RTSTR,"myfun",RTNONE);
resbuf *rb_out = NULL;
int rc = acedInvoke(rb_in,&rb_out);
acutRelRb(rb_in); acutRelRb(rb_out);
acedGetSym("myfunret",&rb_out);
return (RSRSLT) ;
}
 楼主| 发表于 2004-10-6 08:22:00 | 显示全部楼层
本帖最后由 作者 于 2004-10-11 8:45:49 编辑

谢谢!

发表于 2004-10-11 11:16:00 | 显示全部楼层
上次的问题怎么解决的? 以下是上次的程序: const char * str;
str = "(defun dtr(a) (* a ( / Pi 180.0))) ";
acDocManager->sendStringToExecute(pAcTargetDocument,str,false); //向CAD发送LISP字符串
acDocManager->sendStringToExecute(pAcTargetDocument,"(vl-acad-defun 'dtr) ",false); //函数註册
int stat;
int x = 180;
struct resbuf *result = NULL;
struct resbuf *list;
list = acutBuildList(RTSTR, "dtr", RTSHORT, x, RTNONE);
if (list != NULL)
{ stat = acedInvoke(list, &result);
acutRelRb(list);
}
if (result != NULL)
{ acutPrintf("\nSuccess: dtr of %d is %f\n", x, result->resval.rreal);
acutRelRb(result);
}
else
acutPrintf("Test failed\n");
结果运行的结果是这样的:
第一次是这样的.
Command: ff Test failed
Command: (defun dtr(a) (* a ( / Pi 180.0))) DTR
Command: (vl-acad-defun 'dtr) 2085
以后运行结果是这样的:
Command: ff
Success: dtr of 180 is 3.141593
Command: (defun dtr(a) (* a ( / Pi 180.0))) DTR
Command: (vl-acad-defun 'dtr) 2085
问题:第一次执行失败,以后就对了,是不是LISP函数註册的问题呀?还是命令栈后进先出的问题,
总之第一次运行就不正确,你帮著看下有什么好的解决办法,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 11:49 , Processed in 0.165043 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表