一个内部错误。帮忙解决下。多谢!!!
我的这段代码在arx/2002中运行后竟然有问题: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
急!多谢多谢
我在2004下没有问题,不过
selectEntity(eId,AcDb::kForWrite);你的函数是AcDbEntity*类型的(返回值)
AcDbEntity * ent = selectEntity(eId,AcDb::kForWrite); 前面定义的函数没有问题,问题可能在SS3命令的实现函数中,但是该函数的内容明显不全…
有可能在执行selectEntity函数之前eId对象没有被关闭。 非常感谢您的回答,我的代码就这个样子,没有省略什么,
就是说我的arx程序就这2个函数,而且ss3函数就那么2行。呵呵
这么说就是我的autocad2002破解版不好(用的D版),而且出现哪个错误对话框后,还跳出个对话框说要关闭autocad,接着还会跳出一个对话框说“版权锁”有问题。
多谢,下次我重装个autocad试试。然后把检查的结果发上来。
另一小问:
有谁有李世国的那本ARX编程及应用书的源代码?
谢了
这个问题不解决好多事都不能做,郁闷:下面这个完整的代码:
// 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;
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=centerPt;
pt=centerPt;
pt=centerPt;
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=startPt;
pt=startPt;
pt=startPt;
ads_getpoint(pt,"\n起点:",asDblArray(startPt));
ads_getreal("\n字高:",&height);
strcpy(prompt,"\ntext:");
ads_getstring(NULL,prompt,str);
pText->setPosition(startPt);
pText->setHeight(height);
pText->setTextString(str);
}
pEnt->close();
}
分配的指针也都close()了。可是我在autocad2002下就是不能运行。调试后发现问题也是出在哪个实体选择和取得指针哪里。呜呜~~~
郁闷啊。
请帮忙解决下谢谢
另,又装了autocad 2000,运行后也是内部错误,提示和原因相同~~
把整个源程序传上去看看。多谢 调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~
上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。
多谢。
getpoint.rar
页:
[1]