111111 发表于 2004-3-31 09:39:00

求大家看看这是怎么回事!!!

还是实现CAD屏幕上文字的输出,代码如下:
void drawtext()
{       AcGePoint3d startpoint(100,100,0);
               AcDbText       textout(startpoint,"This is a Test!");
               AcDbBlockTable *pblocktable;
               acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pblocktable,AcDb::kForWrite);
               AcDbBlockTableRecord *pblockrecord;
               pblocktable->getAt(ACDB_MODEL_SPACE,pblockrecord,AcDb::kForWrite);
               pblocktable->close();
               AcDbObjectId id;
               pblockrecord->appendAcDbEntity(id,&textout);
               pblockrecord->close();
               textout.close();
}
用VC编译没有错误,但CAD加载ARX文件执行时,输出如下错误提示:
---------------------------
错误中断
---------------------------
内部错误:       !U:\global\src\ObjectDbx\DB\IMP\src\dbobji.cpp@280
---------------------------
确定               
---------------------------
不知是怎么回事,求大家指点一下吧!!!

comseg007 发表于 2004-3-31 15:31:00

错误在于               AcDbText         textout(startpoint,"This is a Test!");
应该是 AcDbText*         textout=new AcDbText(startpoint,"This is a Test!");然后下句         pblockrecord->appendAcDbEntity(id,&textout);
改为: pblockrecord->appendAcDbEntity(id,textout);

111111 发表于 2004-4-1 15:35:00

遵从楼上的指教,改了代码,程序运行有了结果,但不知我的错误代码和您的正确代码之间的区别何在?那么又如何实现字体,颜色等的设置来输出有大小区别的中文字呢?各位能给举个例子吗?

comseg007 发表于 2004-4-1 21:52:00

强烈建议你先复习C或C++语言,
然后再来吧...

111111 发表于 2004-4-2 12:03:00

是不是因为appendAcDbEntity()方法执行时,直接将你创建的实体加入到数据库,而不是拷贝它的副本到数据库,这样当不是动态创建对象时,在drawtext()方法
的结束处,textout对象的作用域结束,系统释放对象,而对象已加入到数据库,这样便导致了错误。而动态创建对象时,要显式调用delete时才调用它的析构函数来
释放对象,因为没有调用delete所以才不会出现那样的错误。经你的提醒我才发现
在程序中只有new,而没有delete,我一直以为自己的C++学的还凑合,到现在才
发现确实不行,多谢楼上的指教。最后问一下:我的想法对吗?
页: [1]
查看完整版本: 求大家看看这是怎么回事!!!