Тема: eHadMultipleReades [ITERNAL ERROR]
Такой код:
void Lx() { LOCK_DOC; ads_name ss; long nss = 0; Acad::ErrorStatus err; if (acedSSGet(NULL,NULL,NULL,NULL,ss) == RTNORM && acedSSLength(ss,&nss) == RTNORM) { for (long i = 0; i < nss; i++) { ads_name en; if (acedSSName(ss,i,en) != RTNORM) continue; AcDbObjectId eid; AcDbEntity *pEnt; if (acdbGetObjectId(eid,en) != Acad::eOk) continue; //AcDbObjectPointer<AcDbEntity> pEnt(eid,AcDb::kForRead); acdbOpenAcDbEntity(pEnt,eid,AcDb::kForRead); //if (pEnt.openStatus() != Acad::eOk) continue; CString szFactor,szArt; acutPrintf("\nN=%d ",i); if (AcDbBlockReference::cast(pEnt)) { AcDbBlockReference *pBlockRef=AcDbBlockReference::cast(pEnt); szFactor=GetAttValue(pBlockRef,"FAKTOR"); szArt=GetAttValue(pBlockRef,"ART"); acutPrintf("info:%s %s[x%s]\n", pEnt->isA()->name(),szArt,szFactor); err=pBlockRef->close(); err=pEnt->close(); } } acedSSFree(ss); } UNLOCK_DOC; } /////////////////////////// Получение значения атрибута блока ///////////////////////////////////////////// // Передаём AcDbEntity*, CString, получаем CString ////////////////////////////// CString GetAttValue(AcDbBlockReference *t_pRef, CString opt_tag) { CString t_str; AcDbObjectIterator *pAttIterator; pAttIterator = t_pRef->attributeIterator(); AcDbAttribute *pAttribute; for(pAttIterator->start();!pAttIterator->done();pAttIterator->step()) { t_pRef->openAttribute(pAttribute,pAttIterator->objectId(),AcDb::kForRead); t_str.Format("%s - %s\n",pAttribute->textString(),pAttribute->tag()); OutputDebugString(t_str); if(opt_tag==pAttribute->tag()) { t_str=pAttribute->textString(); break; } else t_str=""; pAttribute->close(); } t_pRef->close(); delete pAttIterator; return t_str; }
Эти ф-ции исполняются нормально, но после их выполнения при перемещении за "ручку" одного из использованых в них объекта акад вываливается с [ITERNAL ERROR] eHadMultipleReades. Что я не закрываю?