Тема: Выдает Fatal Error при работе с примитивами и xData.
Народ я тут написал процедурку, которая получает xData, со всех примитивов на чертеже и сравнивает..в принципе вот и все..и про завершении происходит фатал..подскажите плиз, кто смогет..Вот код
int CMainWindow::dbSyncronization()
{
recDelList = CString("");
CDatabase db;
db.OpenEx(str_connect,CDatabase::noOdbcDialog);
CRecordset Rs;
Rs.m_pDatabase = &db;
bool check = false;
AcAxDocLock lock(acdbHostApplicationServices()->workingDatabase());
AcDbBlockTable *pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlkTbl, AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead);
pBlkTbl->close();
Rs.Open(CRecordset::forwardOnly, _T("SELECT ID_COUNT_ FROM PID_Components_Process_Lines WHERE DWG_NAME_ = '" + dwgNameDB + "'"));
int errCount = 0, recCount = 0;
pc_checking->SetRange32(0, Rs.GetRecordCount());
while (!Rs.IsEOF())
{
recCount++;
CString p1, errLine = CString("");
Rs.GetFieldValue(0, p1);
AcDbBlockTableRecordIterator *pBlkTblRcdItr;
pBlkTblRcd->newIterator(pBlkTblRcdItr);
int objCount = 0;
check = false;
pc_checking->SetPos(recCount);
for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step())
{
objCount++;
CString lineID;
AcDbEntity *pEnt;
pBlkTblRcdItr->getEntity(pEnt, AcDb::kForWrite);
if ((pEnt->isKindOf(AcDbPolyline::desc())) | (pEnt->isKindOf(AcDb2dPolyline::desc())))
{
struct resbuf *pRb, *pTemp;
pRb = pEnt->xData(CString("CFD1"));
if (pRb != NULL)
{
int count = 0;
for (pTemp = pRb; pTemp->rbnext != NULL; pTemp = pTemp->rbnext)
{
count ++;
if (count == 7)
{
lineID = LongToStr(pTemp->resval.rlong);
break;
}
}
}
acutRelRb(pRb);
}
pEnt->close();
errLine = p1;
if (p1 == lineID)
{
check = true;
errLine = "";
break;
}
}
delete pBlkTblRcdItr;
pBlkTblRcd->close();
if ((check == false) & (errLine != CString("")) & (objCount != 0))
{
recDelList += "'" + errLine + "',";
errCount++;
}
if ((check == false) & (objCount == 0))
{
recDelList += "'" + p1 + "',";
errCount++;
}
Rs.MoveNext();
}
Вроде все учел.
Заранее спасибо
Rs.Close();
db.Close();
pc_checking->SetPos(0);
return errCount;
}