pcat 发表于 2005-1-6 18:21:00

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

我的这段代码在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
急!多谢多谢
       

王咣生 发表于 2005-1-6 18:56:00

我在2004下没有问题,不过
selectEntity(eId,AcDb::kForWrite);你的函数是AcDbEntity*类型的(返回值)
AcDbEntity * ent = selectEntity(eId,AcDb::kForWrite);

zfbj 发表于 2005-1-6 21:12:00

前面定义的函数没有问题,问题可能在SS3命令的实现函数中,但是该函数的内容明显不全…
有可能在执行selectEntity函数之前eId对象没有被关闭。

pcat 发表于 2005-1-6 21:32:00

非常感谢您的回答,我的代码就这个样子,没有省略什么,
就是说我的arx程序就这2个函数,而且ss3函数就那么2行。呵呵
这么说就是我的autocad2002破解版不好(用的D版),而且出现哪个错误对话框后,还跳出个对话框说要关闭autocad,接着还会跳出一个对话框说“版权锁”有问题。
多谢,下次我重装个autocad试试。然后把检查的结果发上来。

pcat 发表于 2005-1-6 22:01:00

另一小问:
有谁有李世国的那本ARX编程及应用书的源代码?
谢了

pcat 发表于 2005-1-7 00:56:00


这个问题不解决好多事都不能做,郁闷:下面这个完整的代码:
// 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,运行后也是内部错误,提示和原因相同~~

pcat 发表于 2005-1-7 08:38:00

把整个源程序传上去看看。多谢

pcat 发表于 2005-1-7 16:11:00

调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~
上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。
多谢。
getpoint.rar
页: [1]
查看完整版本: 一个内部错误。帮忙解决下。多谢!!!