一个内部错误。帮忙解决下。多谢!!!
我的这段代码在arx/autocad2002中运行后竟然有问题:<br>AcDbEntity* <br>
selectEntity(AcDbObjectId& eId, AcDb::OpenMode openMode) <br>
{ <br>
ads_name en; <br>
ads_point pt; <br>
acedEntSel("\nSelect an entity: ", en, pt); <br>
// Exchange the ads_name for an object ID. <br>
// <br>
acdbGetObjectId(eId, en); <br>
AcDbEntity * pEnt; <br>
acdbOpenObject(pEnt, eId, openMode); <br>
return pEnt; <br>
} <br>
// This is command 'SS3' <br>
void css3() <br>
{ <br>
// TODO: Implement the command <br>
<br>
AcDbObjectId eId; <br>
selectEntity(eId,AcDb::kForWrite); <br>
} <br>
运行后说内部错误,<b style="color: black; background-color: rgb(153, 255, 153);"></b> !U:\\global\\src\\corecad\CORESRC\scandr.cpp@773:eWasOpenForWrite<br>
急!多谢多谢<br>
<br>
回复
我在2004下没有问题,不过selectEntity(eId,AcDb::kForWrite);你的函数是AcDbEntity*类型的(返回值)
AcDbEntity * ent = selectEntity(eId,AcDb::kForWrite); 前面定义的函数没有问题,问题可能在SS3命令的实现函数中,但是该函数的内容明显不全…
有可能在执行selectEntity函数之前eId对象没有被关闭。 非常感谢您的回答,我的代码就这个样子,没有省略什么,<br>
就是说我的arx程序就这2个函数,而且ss3函数就那么2行。呵呵<br>
这么说就是我的autocad2002破解版不好(用的D版),而且出现哪个错误对话框后,还跳出个对话框说要关闭autocad,接着还会跳出一个对话框说“版权锁”有问题。<br>
多谢,下次我重装个autocad试试。然后把检查的结果发上来。<br>
<br> 另一小问:<br>
有谁有李世国的那本ARX编程及应用书的源代码?<br>
谢了<br> 本帖最后由 作者 于 2005-1-7 8:26:54 编辑 <br /><br /> 这个问题不解决好多事都不能做,郁闷:下面这个完整的代码:<br>
// This is command 'D'<br>
void cd()<br>
{<br>
// TODO: Implement the command<br>
// TODO: Implement the command<br>
ads_name en;<br>
double radius, height;<br>
ads_point pt;<br>
AcGePoint3d startPt,endPt,centerPt;<br>
char *str, prompt;<br>
AcDbLine *pLine;<br>
AcDbCircle *pCircle;<br>
AcDbText *pText;<br>
if(ads_entsel("\n选择实体:",en,pt)!=RTNORM)<br>
{<br>
ads_printf("没有选择实体\n");<br>
return;<br>
}<br>
AcDbObjectId eld;<br>
acdbGetObjectId(eld,en);<br>
AcDbEntity *pEnt;<br>
acdbOpenObject(pEnt, eld, AcDb::kForWrite);<br>
pEnt->highlight(kNullSubent);<br>
if(strcmp(pEnt->isA()->name(),"AcDbLine")==0)<br>
{<br>
ads_printf(pEnt->linetype());<br>
pEnt->setLinetype("center");<br>
pEnt->setLinetypeScale(5.0);<br>
pLine=AcDbLine::cast(pEnt);<br>
ads_getpoint(NULL,"\起点:",asDblArray(startPt));<br>
pLine->setStartPoint(startPt);<br>
ads_getpoint(NULL,"\n终点:",asDblArray(endPt));<br>
pLine->setEndPoint(endPt);<br>
<br>
}<br>
if(strcmp(pEnt->isA()->name(),"AcDbCircle")==0)<br>
{<br>
pCircle=AcDbCircle::cast(pEnt);<br>
centerPt=pCircle->center();<br>
pt=centerPt;<br>
pt=centerPt;<br>
pt=centerPt;<br>
ads_getpoint(pt,"\n圆心:",asDblArray(centerPt));<br>
ads_getreal("\n半径:",&radius);<br>
pCircle->setCenter(centerPt);<br>
pCircle->setRadius(radius);<br>
<br>
}<br>
if(strcmp(pEnt->isA()->name(),"AcDbText")==0)<br>
{<br>
pText=AcDbText::cast(pEnt);<br>
startPt=pText->position();<br>
str=pText->textString();<br>
pt=startPt;<br>
pt=startPt;<br>
pt=startPt;<br>
<br>
ads_getpoint(pt,"\n起点:",asDblArray(startPt));<br>
ads_getreal("\n字高:",&height);<br>
strcpy(prompt,"\ntext<");<br>
strcat(prompt,str);<br>
strcat(prompt,">:");<br>
ads_getstring(NULL,prompt,str);<br>
pText->setPosition(startPt);<br>
pText->setHeight(height);<br>
pText->setTextString(str);<br>
<br>
}<br>
pEnt->close();<br>
}<br>
<br>
分配的指针也都close()了。可是我在autocad2002下就是不能运行。调试后发现问题也是出在哪个实体选择和取得指针哪里。呜呜~~~<br>
郁闷啊。<br>
请帮忙解决下谢谢<br>
<br>
另,又装了autocad 2000,运行后也是内部错误,提示和原因相同~~<br> 把整个源程序传上去看看。多谢 调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~<BR>上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。
多谢。
页:
[1]