成精的熊大 发表于 2025-10-26 00:53:43

acdbOpenObject函数使用问题

AcDbObjectIdArray allEntIds = CDwgDatabaseUtil::GetAllEntIds();//GetAllEntIds()函数会获得图形数据库中所有实体的Id
AcDbObjectId 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指针仍然为空呢?

gzxl 发表于 2025-10-26 01:34:03

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

橡皮 发表于 2025-10-26 13:00:00

if (acdbOpenObject(pBlkRef, allEntIds, AcDb::kForRead) == Acad::eOk);
这句话后边多了一个 ; 分号。

成精的熊大 发表于 2025-10-27 11:30:00

gzxl 发表于 2025-10-26 01:34


感谢

成精的熊大 发表于 2025-10-27 11:31:05

橡皮 发表于 2025-10-26 13:00
if (acdbOpenObject(pBlkRef, allEntIds, AcDb::kForRead) == Acad::eOk);
这句话后边多了一个 ; 分号。

调试折腾了半天,感谢感谢!

成精的熊大 发表于 2025-10-27 11:33:17

gzxl 发表于 2025-10-26 01:34


qq号搜不到呢
页: [1]
查看完整版本: acdbOpenObject函数使用问题