musiclover 发表于 2007-10-17 10:40:00

请教一个删除扩展数据函数的问题

<p>下面是找到的一个删除扩展数据的函数,但是我觉得是不是如注释那样:</p><p></p><p>void delXdata()<br/>{<br/>&nbsp;&nbsp;&nbsp; ads_name eNam;<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ads_point pt;<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; int ret = acedEntSel ("\nselect an object:", eNam, pt);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; if ( ret!= RTNORM)&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; AcDbObjectId ObjId;<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; acdbGetObjectId(ObjId, eNam);<br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; AcDbEntity *pEnt;</p><p>&nbsp;&nbsp;&nbsp; acdbOpenAcDbEntity(pEnt, ObjId, AcDb::kForWrite);</p><p>&nbsp;&nbsp;&nbsp; resbuf *xdata = pEnt-&gt;xData(NULL);</p><p>&nbsp;&nbsp;&nbsp; if (xdata)<br/>&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xdata-&gt;rbnext = NULL;&nbsp; //是不是要先delete,再= NULL?不然原来的内容没有释放啊!如果有多个rbnext&nbsp;的话,是否要循环全部删除?而不只删除&nbsp; 一个?<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pEnt-&gt;setXData(xdata);<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acutRelRb(xdata);<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; pEnt-&gt;close();<br/>}</p><p></p>

fpiw 发表于 2007-10-17 21:44:00

确实有问题

xinye1031 发表于 2008-1-10 10:11:00

我运行后也出现错误呢,是哪里有问题?

bluelightcsy 发表于 2008-1-10 10:32:00

你已经调用acutRelRb了。resbuf应该类似于一个链表结构的。所以acutRelRb调用一次就行了,传入要删除的指针头。从中间删除应该也可以,可能要把最后一个指针置为NULL. a-&gt;b-&gt;c。传入b,然后置a-&gt;next = Null。应该先删,后置null,否则你delete一个null,什么都没做。

wzz1968 发表于 2008-1-16 20:25:00

<p>扩充数据的删除不能用上述方法,上述方法不能删除扩充数据,</p><p>删除扩充数据的方法是将扩充数据中的1001扩充数据改为空.</p><p></p>
页: [1]
查看完整版本: 请教一个删除扩展数据函数的问题