Why it crash?

Why it crash?

Anonymous
Not applicable
758 Views
2 Replies
Message 1 of 3

Why it crash?

Anonymous
Not applicable

 

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();
		}
	}
}

 

 

0 Likes
759 Views
2 Replies
Replies (2)
Message 2 of 3

Alexander.Rivilis
Mentor
Mentor

Your code contains terrible mixture of ANSI and UNICODE strings. Beginning with AutoCAD 2007, all strings used in ObjectARX must be UNICODE.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

0 Likes
Message 3 of 3

lena.talkhina
Alumni
Alumni

Hello @Anonymous  !

Great to see you here on ObjectARX Forum.

Did you find a solution?
If yes, please click on the "Accept as Solution" button as then also other community users can easily find and benefit from the information.
If not please don't hesitate to give an update here in your topic so all members know what ́s the progression on your question is and what might be helpful to achieve what you ́re looking for. 🙂

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.



Лена Талхина/Lena Talkhina
Менеджер Сообщества - Русский/Community Manager - Russian

0 Likes