乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 71|回复: 4

【求助】pObj1->isA()->name()老是崩溃

[复制链接]

4

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-10-9 16:58:00 | 显示全部楼层 |阅读模式
#include "stdafx.h"
#include "commom.h"
#include ".\commom.h"
#include "stdlib.h"
#include "dbid.h"
void test()
{
    AcDbEntity   *pObj;
    AcDbEntity   *pObj1;
    AcDbViewport   *pvObj;
    AcDbObjectId  objId,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();//关闭指针
}
以上是代码,运行到判断实体类型的时候老是崩溃,不知道怎么回事,还望高手解决!多谢了。
回复

使用道具 举报

13

主题

119

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2013-10-9 18:41:00 | 显示全部楼层
你的代码太不严谨了,对象有没选到也不判断,对象能否打开也不判断,试下以读打开不要写打开对象。
回复

使用道具 举报

32

主题

268

帖子

10

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2013-10-9 20:49:00 | 显示全部楼层
调试时断点跟踪一下,应该是acdbOpenObject失败,还有将 AcDbEntity   *pObj、 AcDbEntity   *pObj1、AcDbViewport   *pvObj初始化为空,养成习惯;特别通过acdbOpenObject获得对象指针后一定要加判断语句,看看是否成功。
回复

使用道具 举报

4

主题

19

帖子

4

银币

初来乍到

Rank: 1

铜币
35
发表于 2013-10-9 20:58:00 | 显示全部楼层
嗯,谢谢wwwliuyu和风树,确实是这样的问题,我代码修改了一下,但是还是有问题,我发现只要是以写的方式打开块表或对象都会出错,这可不太好。
    Acad::ErrorStatus es = Acad::eOk;
    AcDbEntity   *pObj=NULL;
    AcDbEntity   *pObj1=NULL;
    AcDbViewport   *pvObj=NULL;
    AcDbObjectId  objId,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;
        }
回复

使用道具 举报

13

主题

119

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
171
发表于 2013-10-9 21:07:00 | 显示全部楼层
已以读打开,怎么还能再写打开!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 06:43 , Processed in 0.160163 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表