明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2565|回复: 7

一个内部错误。帮忙解决下。多谢!!!

[复制链接]
发表于 2005-1-6 18:21:00 | 显示全部楼层 |阅读模式
我的这段代码在arx/AutoCAD2002中运行后竟然有问题:
AcDbEntity*
selectEntity(AcDbObjectId& eId, AcDb::OpenMode openMode)
{
ads_name en;
ads_point pt;
acedEntSel("\nSelect an entity: ", en, pt);
// Exchange the ads_name for an object ID.
//
acdbGetObjectId(eId, en);
AcDbEntity * pEnt;
acdbOpenObject(pEnt, eId, openMode);
return pEnt;
}
// This is command 'SS3'
void css3()
{
// TODO: Implement the command

AcDbObjectId eId;
selectEntity(eId,AcDb::kForWrite);
}
运行后说内部错误, !U:\\global\\src\\corecad\CORESRC\scandr.cpp@773:eWasOpenForWrite
急!多谢多谢

发表于 2005-1-6 18:56:00 | 显示全部楼层

回复

我在2004下没有问题,不过


selectEntity(eId,AcDb::kForWrite);你的函数是AcDbEntity*类型的(返回值)


AcDbEntity * ent = selectEntity(eId,AcDb::kForWrite);
发表于 2005-1-6 21:12:00 | 显示全部楼层
前面定义的函数没有问题,问题可能在SS3命令的实现函数中,但是该函数的内容明显不全…


有可能在执行selectEntity函数之前eId对象没有被关闭。
 楼主| 发表于 2005-1-6 21:32:00 | 显示全部楼层
非常感谢您的回答,我的代码就这个样子,没有省略什么,
就是说我的arx程序就这2个函数,而且ss3函数就那么2行。呵呵
这么说就是我的autocad2002破解版不好(用的D版),而且出现哪个错误对话框后,还跳出个对话框说要关闭autocad,接着还会跳出一个对话框说“版权锁”有问题。
多谢,下次我重装个autocad试试。然后把检查的结果发上来。

 楼主| 发表于 2005-1-6 22:01:00 | 显示全部楼层
另一小问:
有谁有李世国的那本ARX编程及应用书的源代码?
谢了
 楼主| 发表于 2005-1-7 00:56:00 | 显示全部楼层
本帖最后由 作者 于 2005-1-7 8:26:54 编辑

这个问题不解决好多事都不能做,郁闷:下面这个完整的代码:
// This is command 'D'
void cd()
{
// TODO: Implement the command
// TODO: Implement the command
ads_name en;
double radius, height;
ads_point pt;
AcGePoint3d startPt,endPt,centerPt;
char *str, prompt[256];
AcDbLine *pLine;
AcDbCircle *pCircle;
AcDbText *pText;
if(ads_entsel("\n选择实体:",en,pt)!=RTNORM)
{
ads_printf("没有选择实体\n");
return;
}
AcDbObjectId eld;
acdbGetObjectId(eld,en);
AcDbEntity *pEnt;
acdbOpenObject(pEnt, eld, AcDb::kForWrite);
pEnt->highlight(kNullSubent);
if(strcmp(pEnt->isA()->name(),"AcDbLine")==0)
{
ads_printf(pEnt->linetype());
pEnt->setLinetype("center");
pEnt->setLinetypeScale(5.0);
pLine=AcDbLine::cast(pEnt);
ads_getpoint(NULL,"\起点:",asDblArray(startPt));
pLine->setStartPoint(startPt);
ads_getpoint(NULL,"\n终点:",asDblArray(endPt));
pLine->setEndPoint(endPt);

}
if(strcmp(pEnt->isA()->name(),"AcDbCircle")==0)
{
pCircle=AcDbCircle::cast(pEnt);
centerPt=pCircle->center();
pt[X]=centerPt[X];
pt[Y]=centerPt[Y];
pt[Z]=centerPt[Z];
ads_getpoint(pt,"\n圆心:",asDblArray(centerPt));
ads_getreal("\n半径:",&radius);
pCircle->setCenter(centerPt);
pCircle->setRadius(radius);

}
if(strcmp(pEnt->isA()->name(),"AcDbText")==0)
{
pText=AcDbText::cast(pEnt);
startPt=pText->position();
str=pText->textString();
pt[X]=startPt[X];
pt[Y]=startPt[Y];
pt[Z]=startPt[Z];

ads_getpoint(pt,"\n起点:",asDblArray(startPt));
ads_getreal("\n字高:",&height);
strcpy(prompt,"\ntext<");
strcat(prompt,str);
strcat(prompt,">:");
ads_getstring(NULL,prompt,str);
pText->setPosition(startPt);
pText->setHeight(height);
pText->setTextString(str);

}
pEnt->close();
}

分配的指针也都close()了。可是我在autocad2002下就是不能运行。调试后发现问题也是出在哪个实体选择和取得指针哪里。呜呜~~~
郁闷啊。
请帮忙解决下谢谢

另,又装了autocad 2000,运行后也是内部错误,提示和原因相同~~
 楼主| 发表于 2005-1-7 08:38:00 | 显示全部楼层
把整个源程序传上去看看。多谢

本帖子中包含更多资源

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

x
 楼主| 发表于 2005-1-7 16:11:00 | 显示全部楼层
调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~
上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。 多谢。

本帖子中包含更多资源

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

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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