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

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

我的这段代码在arx/autocad2002中运行后竟然有问题:<br>
AcDbEntity* <br>
selectEntity(AcDbObjectId&amp; 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>

王咣生 发表于 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

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

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

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

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

本帖最后由 作者 于 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-&gt;highlight(kNullSubent);<br>
                       if(strcmp(pEnt-&gt;isA()-&gt;name(),"AcDbLine")==0)<br>
                       {<br>
                                              ads_printf(pEnt-&gt;linetype());<br>
                                              pEnt-&gt;setLinetype("center");<br>
                                              pEnt-&gt;setLinetypeScale(5.0);<br>
                                              pLine=AcDbLine::cast(pEnt);<br>
                                              ads_getpoint(NULL,"\起点:",asDblArray(startPt));<br>
                                              pLine-&gt;setStartPoint(startPt);<br>
                                              ads_getpoint(NULL,"\n终点:",asDblArray(endPt));<br>
                                              pLine-&gt;setEndPoint(endPt);<br>
<br>
                       }<br>
                       if(strcmp(pEnt-&gt;isA()-&gt;name(),"AcDbCircle")==0)<br>
                       {<br>
                                              pCircle=AcDbCircle::cast(pEnt);<br>
                                              centerPt=pCircle-&gt;center();<br>
                                              pt=centerPt;<br>
                                              pt=centerPt;<br>
                                              pt=centerPt;<br>
                                              ads_getpoint(pt,"\n圆心:",asDblArray(centerPt));<br>
                                              ads_getreal("\n半径:",&amp;radius);<br>
                                              pCircle-&gt;setCenter(centerPt);<br>
                                              pCircle-&gt;setRadius(radius);<br>
<br>
                       }<br>
                       if(strcmp(pEnt-&gt;isA()-&gt;name(),"AcDbText")==0)<br>
                       {<br>
                                              pText=AcDbText::cast(pEnt);<br>
                                              startPt=pText-&gt;position();<br>
                                              str=pText-&gt;textString();<br>
                                              pt=startPt;<br>
                                              pt=startPt;<br>
                                              pt=startPt;<br>
<br>
                                              ads_getpoint(pt,"\n起点:",asDblArray(startPt));<br>
                                              ads_getreal("\n字高:",&amp;height);<br>
                                              strcpy(prompt,"\ntext&lt;");<br>
                                              strcat(prompt,str);<br>
                                              strcat(prompt,"&gt;:");<br>
                                              ads_getstring(NULL,prompt,str);<br>
                                              pText-&gt;setPosition(startPt);<br>
                                              pText-&gt;setHeight(height);<br>
                                              pText-&gt;setTextString(str);<br>
<br>
                       }<br>
                       pEnt-&gt;close();<br>
}<br>
<br>
分配的指针也都close()了。可是我在autocad2002下就是不能运行。调试后发现问题也是出在哪个实体选择和取得指针哪里。呜呜~~~<br>
郁闷啊。<br>
请帮忙解决下谢谢<br>
<br>
另,又装了autocad 2000,运行后也是内部错误,提示和原因相同~~<br>

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

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

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

调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~<BR>上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。


多谢。


页: [1]
查看完整版本: 一个内部错误。帮忙解决下。多谢!!!