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

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

还是实现CAD屏幕上文字的输出,代码如下:


void drawtext()<BR>{       AcGePoint3d startpoint(100,100,0);<BR>               AcDbText       textout(startpoint,"This is a Test!");<BR>               AcDbBlockTable *pblocktable;<BR>               acdbHostApplicationServices()-&gt;workingDatabase()-&gt;getSymbolTable(pblocktable,AcDb::kForWrite);<BR>               AcDbBlockTableRecord *pblockrecord;<BR>               pblocktable-&gt;getAt(ACDB_MODEL_SPACE,pblockrecord,AcDb::kForWrite);<BR>               pblocktable-&gt;close();<BR>               AcDbObjectId id;<BR>               pblockrecord-&gt;appendAcDbEntity(id,&amp;textout);<BR>               pblockrecord-&gt;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>不知是怎么回事,求大家指点一下吧!!!

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

错误在于               AcDbText       textout(startpoint,"This is a Test!");


应该是 AcDbText*       textout=new AcDbText(startpoint,"This is a Test!");



然后下句       pblockrecord-&gt;appendAcDbEntity(id,&amp;textout);


改为: pblockrecord-&gt;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]
查看完整版本: 求大家看看这是怎么回事!!!