找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2775|回复: 8

[编程申请]:[objectARX]为什么acedsetVar("USERS1",'DD')后在autocad中看

[复制链接]
发表于 2002-2-21 11:18:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
为什么acedsetVar("USERS1",'DD')后在autocad中看不到users1的值?
我想在一个模块(cpp)中设置USERS1的值,另外一个模块(cpp)中用acedgetvar读出来,但是结果读不出来,可是如下程序却可以读出来(在一个模块(cpp)中),
我的目的是做一个CString类型全局变量,不知VC++如何实现?

                        if(pEnt->isKindOf(AcDbText::desc()))
                        {
                                pEnt->highlight();
                                AcDbText *pTxt;
                                struct resbuf rb,rb1;
                                if (Acad::eOk==acdbOpenObject(pTxt,objId,AcDb::kForRead))
                                        {
                                                char *ptxt=pTxt->textString();

                                                rb.restype = RTSTR;
                                                if ((rb.resval.rstring = (char *)malloc(20))!=NULL)
                                                {
                                                strcpy(rb.resval.rstring,ptxt);
                                                acutPrintf("\nÎÄ×ÖΪ:==%s\n",ptxt);
                                                acutPrintf("\nrb.resval.rstring:==%s\n",rb.resval.rstring);
                                        //        FlashEntity(objId);
//                                                acedGetAcadFrame()->SetWindowText(_T(ptxt));
                                               
                                                acedSetVar("USERS1",&rb);
                                                free(rb.resval.rstring);
                                               
                                acedGetVar("USERS1",&rb1 );
                                acutPrintf("\nread_rstring:==%s\n",rb.resval.rstring);
                                free(rb.resval.rstring);
                                                }


                                sendCommandToAutoCAD(adsw_acadMainWnd(),"modal\n");

                                }

                                pTxt->close();
                               
                        }
                       
                       
                        pEnt->unhighlight();
                        pEnt->close();
                       
                }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-2-21 14:06:39 | 显示全部楼层

Re: [编程申请]:[objectARX]为什么acedsetVar("USERS1",'DD')后在autocad中看不到users1的

最初由 hotgirl 发布
[B]为什么acedsetVar("USERS1",'DD')后在autocad中看不到users1的值?
我想在一个模块(cpp)中设置USERS1的值,另外一个模块(cpp)中用acedgetvar读出来,但是结果读不出来,可是如下程序却可以读出来(在一个模块(cpp)中),
... [/B]


打印不正确是因为你在下边两句中将rb1写成了rb
acutPrintf("\nread_rstring:==%s\n",rb.resval.rstring);
free(rb.resval.rstring);

另外,你的程序中有两个内存问题,为什么给rb.resval.rstring分配20个字节的内存空间,不知有何依据?当ptxt长度大于20时
strcpy(rb.resval.rstring,ptxt);
就不对了。
还有
char *ptxt=pTxt->textString();
这句运行后应该释放ptxt占用的内存。

题外话:用ANSI C也并不一定要用malloc分配内存,你可试着用用别的函数,如:
rb.resval.rstring=_strdup(ptxt);等等。
用CString 就更简单了,那句free(rb.resval.rstring); 也可以省了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-2-21 16:20:11 | 显示全部楼层
我将acutPrintf("\nread_rstring:==%s\n",rb.resval.rstring);
free(rb.resval.rstring); 中的rb改为rb1依然看不到结果,但是程序显示设置成功,为何无法读出来,请
版主帮助调一下,只要acedsetvar("USERS1","test_string") 然后能用acedgetvar读出来就行.多谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-21 16:40:32 | 显示全部楼层
其实和设置别的系统变量没有任何区别
1.你可以用本论坛提供的函数库中的一个函数
BOOL HZHDLL_API SetVar(const char *sVarName,const char *sValue);
SetVar(_T("USERS1"),lpszTest);
2.直接调用acedSetVar
resbuf *pResbuf=acutBuildList(RTSTR,lpszTest,RTNONE);
acedSetVar(_T("USERS1"),pResbuf);
acutRelRb(pResbuf);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-2-22 14:23:53 | 显示全部楼层
还是不行,我用你的办法设置了USERS1变量后,到autocad2000中,打入USERS1后,显示空值,救命啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-22 17:20:51 | 显示全部楼层
最初由 hotgirl 发布
[B]还是不行,我用你的办法设置了USERS1变量后,到autocad2000中,打入USERS1后,显示空值,救命啊! [/B]

下边这段代码,你直接运行一下看看:
resbuf *pResbuf=acutBuildList(RTSTR,_T("21431231"),RTNONE);
acedSetVar(_T("USERS1"),pResbuf);
acutRelRb(pResbuf);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-2-24 07:33:49 | 显示全部楼层

Re: [编程申请]:[objectARX]为什么acedsetVar("USERS1",'DD')后在autocad中看不到users1的

最初由 hotgirl 发布
[B]为什么acedsetVar("USERS1",'DD')后在autocad中看不到users1的值?
我想在一个模块(cpp)中设置USERS1的值,另外一个模块(cpp)中用acedgetvar读出来,但是结果读不出来,可是如下程序却可以读出来(在一个模块(cpp)中),
... [/B]


ads_setvar中的resbuf 别用静态的变量,定义成一个指针,动态分配内存,然后再试试.

如:

resbuf * rb=ads_newrb(RTSTR);
rb->resval.rstring=....

ads_setvar("user1",rb);

ads_relrb(rb);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-25 09:05:45 | 显示全部楼层
ads_newrb和ads_buildlist以及直接声明是一样的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-2-26 14:04:49 | 显示全部楼层
谢谢XDSOFT,
resbuf * rb=ads_newrb(RTSTR);
rb->resval.rstring=....

ads_setvar("user1",rb);

ads_relrb(rb);


就行,ok!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-2 10:33 , Processed in 0.508346 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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