acdbOpenObject函数使用问题
AcDbObjectIdArray allEntIds = CDwgDatabaseUtil::GetAllEntIds();//GetAllEntIds()函数会获得图形数据库中所有实体的IdAcDbObjectId blkRefId;
for (int i = 0;i < allEntIds.length();i++)
{
AcDbBlockReference* pBlkRef = NULL;
if (acdbOpenObject(pBlkRef, allEntIds, AcDb::kForRead) == Acad::eOk);//使用acdbOpenObject函数实现了从ID到对象指针的转换
{
blkRefId = pBlkRef->objectId();
pBlkRef->close();
}
}
上面代码中运行时会报错,调试发现pBlkRef指针为空指针。
为什么if语句条件满足了(也就是说cdbOpenObject函数执行成功了)为何 pBlkRef指针仍然为空呢?
AcDbObjectIdArray allEntIds = GetAllEntIds();
AcDbObjectId blkRefId;
int nCount = 0;
for (int i = 0; i < allEntIds.length(); i++)
{
AcDbEntity* pEnt = NULL;
if (acdbOpenObject(pEnt, allEntIds, AcDb::kForRead) == Acad::eOk)
{
if (pEnt->isKindOf(AcDbBlockReference::desc()))
{
AcDbBlockReference* pBlkRef = AcDbBlockReference::cast(pEnt);
blkRefId = pBlkRef->objectId();
pBlkRef->close();
nCount++;
}
pEnt->close();
}
}
acutPrintf(_T("nCount=%d\n"), nCount);
if (acdbOpenObject(pBlkRef, allEntIds, AcDb::kForRead) == Acad::eOk);
这句话后边多了一个 ; 分号。 gzxl 发表于 2025-10-26 01:34
感谢 橡皮 发表于 2025-10-26 13:00
if (acdbOpenObject(pBlkRef, allEntIds, AcDb::kForRead) == Acad::eOk);
这句话后边多了一个 ; 分号。
调试折腾了半天,感谢感谢! gzxl 发表于 2025-10-26 01:34
qq号搜不到呢
页:
[1]