- UID
- 353383
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-11-19
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
请教大家!先跟大家说下思路:我是想根据不同的lt2_radius建立不同的图快记录,但是还是用原来的快名ASDK_BLOCK_LT2
下面的代码能运行,但是调试输入不同的半径值的时候出现了异常: aced.exe中的0x65117d90处最可能的异常:0xc0000005读取位置0x00000004时发生访问冲突
我调试了好多次,觉得应该是因为前一个块记录 还在内存当中,而输入新半径值时建立一个同名的块记录,所以就发生异常!
不知道是不是???
各位大侠指点一下吧!
万分感激!
double lt2_radius;//这个半径值是通过对话框传过来的
double former_radius;//用来储存前一个半径值
AcDbObjectId makeLt2Block()
{
//创建LT2带属性定义的块表记录
//创建并命名一个新块表记录
//
AcDbObjectId blockLt2Id;
ads_point center;
AcDbBlockTableRecord *pLtBlockTableRec
=new AcDbBlockTableRecord();
pLtBlockTableRec->setName("ASDK_BLOCK_LT2");
pLtBlockTableRec->setOrigin(basePoint);
//获取块表
//
AcDbBlockTable *pBlockTable=NULL;
acdbCurDwg()->getSymbolTable(pBlockTable,AcDb::kForWrite);
//将新建的块表记录加入到块表中
//
pBlockTable->add(blockLt2Id,pLtBlockTableRec);
pBlockTable->close();
.....................
return blockLt2Id;
}
void DrawLt2()
{
//首先选一个放置冷铁的基准点,以这个点为圆心画一个半径为lt2_radius的圆形冷铁(已实现)
//这个冷铁应该作为一个块,不论选中哪条线都能弹出对话框,进行重新修改或者选择
ads_name ent0,pick0;
ads_point center;
AcDbObjectId blockLt2Id;
if(acdbEntLast(ent0)!=RTNORM){
acdbFail("\nFail create last entity.");
return ;
}
if(acedSSAdd(NULL,NULL,pick0)!=RTNORM){
acdbFail("\nFail create select set.");
return ;
}
setCurLayer(g_strLayer_Core);
acedGetPoint(NULL,"请选择圆形冷铁的圆心",center);
CopyPoint(basePoint,center);
//遍历块表,如果块表ASDK_BLOCK_LT2已经存在就调用makeLt2Block(blockId,basePoint);
//如果没有就直接执行下去!
//当重新调用的时候要判断所输入的半径是否发生变
//化?如果改变了就要将上一个快解析掉
//又重新建立同名的快
AcDbBlockTable *pBlkTable;
acdbCurDwg()->getSymbolTable (pBlkTable,AcDb::kForRead);
//AcDbBlockTableRecord *pBlkTableRec;
if((!pBlkTable->has("ASDK_BLOCK_LT2"))|(former_radius!=lt2_radius))
//if(pBlkTable->getAt(ASDK_BLOCK_LT2,pBlkTableRec,AcDb::kForWrite)!=Acad::eOk)
{
former_radius=lt2_radius;
pBlkTable->close();
blockLt2Id=makeLt2Block();
}
else pBlkTable->getAt("ASDK_BLOCK_LT2",blockLt2Id,true);
能运行,但是我调试输入不同的半径值的时候出现了异常: aced.exe中的0x65117d90处最可能的异常:0xc0000005读取位置0x00000004时发生访问冲突
我调试了好多次,觉得应该是因为前一个块记录 还在内存当中,而输入新半径值时建立一个同名的块记录,所以就发生异常!
不知道是不是???
有什么解决方法吗? |
|