请教一个删除扩展数据函数的问题
<p>下面是找到的一个删除扩展数据的函数,但是我觉得是不是如注释那样:</p><p></p><p>void delXdata()<br/>{<br/> ads_name eNam;<br/> <br/> ads_point pt;<br/> <br/> int ret = acedEntSel ("\nselect an object:", eNam, pt); <br/> <br/> if ( ret!= RTNORM) <br/> { <br/> return; <br/> }<br/> <br/> AcDbObjectId ObjId;<br/> <br/> acdbGetObjectId(ObjId, eNam);<br/> <br/> AcDbEntity *pEnt;</p><p> acdbOpenAcDbEntity(pEnt, ObjId, AcDb::kForWrite);</p><p> resbuf *xdata = pEnt->xData(NULL);</p><p> if (xdata)<br/> {<br/> xdata->rbnext = NULL; //是不是要先delete,再= NULL?不然原来的内容没有释放啊!如果有多个rbnext 的话,是否要循环全部删除?而不只删除 一个?<br/> <br/> pEnt->setXData(xdata);<br/> <br/> acutRelRb(xdata);<br/> }<br/> <br/> pEnt->close();<br/>}</p><p></p> 确实有问题 我运行后也出现错误呢,是哪里有问题? 你已经调用acutRelRb了。resbuf应该类似于一个链表结构的。所以acutRelRb调用一次就行了,传入要删除的指针头。从中间删除应该也可以,可能要把最后一个指针置为NULL. a->b->c。传入b,然后置a->next = Null。应该先删,后置null,否则你delete一个null,什么都没做。 <p>扩充数据的删除不能用上述方法,上述方法不能删除扩充数据,</p><p>删除扩充数据的方法是将扩充数据中的1001扩充数据改为空.</p><p></p>
页:
[1]