求大家看看这是怎么回事!!!
还是实现CAD屏幕上文字的输出,代码如下:void drawtext()<BR>{ AcGePoint3d startpoint(100,100,0);<BR> AcDbText textout(startpoint,"This is a Test!");<BR> AcDbBlockTable *pblocktable;<BR> acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pblocktable,AcDb::kForWrite);<BR> AcDbBlockTableRecord *pblockrecord;<BR> pblocktable->getAt(ACDB_MODEL_SPACE,pblockrecord,AcDb::kForWrite);<BR> pblocktable->close();<BR> AcDbObjectId id;<BR> pblockrecord->appendAcDbEntity(id,&textout);<BR> pblockrecord->close();<BR> textout.close();<BR>}
用VC编译没有错误,但CAD加载ARX文件执行时,输出如下错误提示:
---------------------------<BR>AutoCAD 错误中断<BR>---------------------------
<BR>内部错误: !U:\global\src\ObjectDbx\DB\IMP\src\dbobji.cpp@280
<BR>---------------------------<BR>确定 <BR>---------------------------<BR>不知是怎么回事,求大家指点一下吧!!! 错误在于 AcDbText textout(startpoint,"This is a Test!");
应该是 AcDbText* textout=new AcDbText(startpoint,"This is a Test!");
然后下句 pblockrecord->appendAcDbEntity(id,&textout);
改为: pblockrecord->appendAcDbEntity(id,textout); 遵从楼上的指教,改了代码,程序运行有了结果,但不知我的错误代码和您的正确代码之间的区别何在?那么又如何实现字体,颜色等的设置来输出有大小区别的中文字呢?各位能给举个例子吗? 强烈建议你先复习C或C++语言,
然后再来吧... 是不是因为appendAcDbEntity()方法执行时,直接将你创建的实体加入到数据库,而不是拷贝它的副本到数据库,这样当不是动态创建对象时,在drawtext()方法
的结束处,textout对象的作用域结束,系统释放对象,而对象已加入到数据库,这样便导致了错误。而动态创建对象时,要显式调用delete时才调用它的析构函数来
释放对象,因为没有调用delete所以才不会出现那样的错误。经你的提醒我才发现
在程序中只有new,而没有delete,我一直以为自己的C++学的还凑合,到现在才
发现确实不行,多谢楼上的指教。最后问一下:我的想法对吗?
页:
[1]