Message 1 of 3
Why it crash?

Not applicable
09-17-2020
07:22 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Dear All:
The problem is: When I test those function singly, they all work well, but when I combine them together code crash at "es = pOutputDb->saveAs(FileName);", please help me Why?
Thanks!
void MyTest::SerachBlockReference2(ACHAR* BlockName)
{
CString pbkRefName;
ACHAR* name;
double d = 1;
AcDbBlockTable* pbkTable;
AcDbBlockTableRecord* pbkTableRcd, * mBK;
AcDbEntity* pEntity;
AcDbBlockTableRecordIterator* pbkRcdIterator;
AcDbExtents RefBoderCoordinate;
AcDbDatabase* pCurDb = NULL;
struct resbuf* pointlist;
ads_point pt1, pt2, pt3, pt4;
pt1[X] = pt1[Y] = pt1[Z] = 0.0;
pt2[X] = pt2[Y] = 5.0; pt2[Z] = 0.0;
pt3[X] = 10.0; pt3[Y] = 5.0; pt3[Z] = 0.0;
pt4[X] = 5.0; pt4[Y] = pt4[Z] = 0.0;
pCurDb = acdbHostApplicationServices()->workingDatabase();
pCurDb->getBlockTable(pbkTable, AcDb::kForRead);
if (pbkTable->getAt(ACDB_MODEL_SPACE, pbkTableRcd, AcDb::kForRead) == Acad::eOk)
{
pbkTable->close();
if (pbkTableRcd->newIterator(pbkRcdIterator) == Acad::eOk)
{
for (; !pbkRcdIterator->done(); pbkRcdIterator->step())
{
pbkRcdIterator->getEntity(pEntity, AcDb::kForRead);
pbkRefName = pEntity->isA()->name();
if (pbkRefName == "AcDbBlockReference")
{
AcDbBlockReference* pRef = AcDbBlockReference::cast(pEntity);
AcDbObjectId idRec = pRef->blockTableRecord();
//获取BlockReference的名字
if (acdbOpenObject(mBK, idRec, AcDb::kForRead) != Acad::eOk)
return;
mBK->getName(name);
if (_tccmp(name, BlockName) == 0)
{
pRef->getGeomExtents(RefBoderCoordinate);
//构建resbuf
pointlist = acutBuildList(RTPOINT, pt1, RTPOINT, pt2, RTPOINT, pt3, RTPOINT, pt4, 0);
AcDbObjectIdArray ObjectIdArray;
// 选择到的实体ID集合
bool SelectCon = MyTest::SelectEntInPoly1(ObjectIdArray, "CP", pointlist);
if (SelectCon) {acutPrintf(L"\n选择到%d个实体.", ObjectIdArray.length());
}
Acad::ErrorStatus es;
AcDbDatabase* pOutputDb = new AcDbDatabase(false);
pCurDb->wblock(pOutputDb, ObjectIdArray, AcGePoint3d::kOrigin);
char filename11[200] = "C:\\Users\\Administrator\\Desktop\\QT\\";
const char* filename55 = "HHACT_TOC_PREV.dwg";
char* p = new char[32];
sprintf_s(p, 32, "%1.0f\n", d);
strcat_s(filename11, p);
*std::remove(filename11, filename11 + strlen(filename11), '\n') = '\0'; // removes _all_ new lines.
strcat_s(filename11, filename55);
const ACHAR* FileName= Convert::ConvertCharPtrToAcharPtr(filename11);
acutPrintf(L"\n");
acutPrintf(FileName);
es = pOutputDb->saveAs(FileName);
delete pOutputDb;
d++;
}
pEntity->close();
pRef->close();
}
}
delete pbkRcdIterator;
pbkTableRcd->close();
}
}
}