【求助】pObj1->isA()->name()老是崩溃
#include "stdafx.h"#include "commom.h"
#include ".\commom.h"
#include "stdlib.h"
#include "dbid.h"
void test()
{
AcDbEntity *pObj;
AcDbEntity *pObj1;
AcDbViewport *pvObj;
AcDbObjectIdobjId,objId1;
ads_name ename;
ads_point pickpt;
try{
acedEntSel("\nSelect a polygon: ",ename, pickpt);
acdbGetObjectId(objId, ename);
acdbOpenObject(pObj1,objId,AcDb::kForWrite);//打开实体对象,获取实体指针
acutPrintf(pObj1->isA()->name());//运行到此处老是崩溃
if (strcmp(pObj1->isA()->name(),"AcDbViewport")==0){
pvObj=(AcDbViewport *)pObj1;
}
else{
acutPrintf("\nnot an Viewport!");
}
pObj1->close();//关闭指针
}
以上是代码,运行到判断实体类型的时候老是崩溃,不知道怎么回事,还望高手解决!多谢了。
你的代码太不严谨了,对象有没选到也不判断,对象能否打开也不判断,试下以读打开不要写打开对象。 调试时断点跟踪一下,应该是acdbOpenObject失败,还有将 AcDbEntity *pObj、 AcDbEntity *pObj1、AcDbViewport *pvObj初始化为空,养成习惯;特别通过acdbOpenObject获得对象指针后一定要加判断语句,看看是否成功。
嗯,谢谢wwwliuyu和风树,确实是这样的问题,我代码修改了一下,但是还是有问题,我发现只要是以写的方式打开块表或对象都会出错,这可不太好。
Acad::ErrorStatus es = Acad::eOk;
AcDbEntity *pObj=NULL;
AcDbEntity *pObj1=NULL;
AcDbViewport *pvObj=NULL;
AcDbObjectIdobjId,objId1;
ads_name ename;
ads_point pickpt;
//打开数据库
AcDbBlockTable *pBlkTbl=NULL;
es=acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForRead);//此处能成功打开
if (Acad::eOk!=es){
acutPrintf("打开数据库失败");
acutPrintf("\n");
return S_OK;
}
AcDbBlockTableRecord *pBlockTableRecord;
es=pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//一旦为写的方式打开就打不开数据库,难道没连接到数据库
if (Acad::eOk!=es){
acutPrintf("打开模型空间数据库失败");
acutPrintf("\n");
pBlkTbl->close();
return S_OK;
}
AcDbBlockTableRecord *pBlkTblRec=NULL;
es=pBlkTbl->getAt(ACDB_PAPER_SPACE, pBlkTblRec, AcDb::kForWrite);//一旦为写的方式打开就打不开数据库
if (Acad::eOk!=es){
acutPrintf("打开图纸空间数据库失败");
acutPrintf("\n");
pBlkTbl->close();
return S_OK;
}
acedEntSel("\nSelect a polygon: ",ename, pickpt);
acdbGetObjectId(objId, ename);
if (acdbOpenObject(pObj1,objId,AcDb::kForWrite)!=Acad::eOk)//一旦为写的方式打开就打不开数据库
{
acutPrintf("打开视口失败");
acutPrintf("\n");
pBlkTblRec->close();
return S_OK;
}
已以读打开,怎么还能再写打开!
页:
[1]