明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1573|回复: 4

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

[复制链接]
发表于 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文件执行时,输出如下错误提示: ---------------------------
AutoCAD 错误中断
---------------------------
内部错误: !U:\global\src\ObjectDbx\DB\IMP\src\dbobji.cpp@280
---------------------------
确定
---------------------------
不知是怎么回事,求大家指点一下吧!!!
发表于 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);
 楼主| 发表于 2004-4-1 15:35:00 | 显示全部楼层
遵从楼上的指教,改了代码,程序运行有了结果,但不知我的错误代码和您的正确代码之间的区别何在?那么又如何实现字体,颜色等的设置来输出有大小区别的中文字呢?各位能给举个例子吗?
发表于 2004-4-1 21:52:00 | 显示全部楼层
强烈建议你先复习C或C++语言,


然后再来吧...
 楼主| 发表于 2004-4-2 12:03:00 | 显示全部楼层
是不是因为appendAcDbEntity()方法执行时,直接将你创建的实体加入到数据库,而不是拷贝它的副本到数据库,这样当不是动态创建对象时,在drawtext()方法


的结束处,textout对象的作用域结束,系统释放对象,而对象已加入到数据库,这样便导致了错误。而动态创建对象时,要显式调用delete时才调用它的析构函数来


释放对象,因为没有调用delete所以才不会出现那样的错误。经你的提醒我才发现


在程序中只有new,而没有delete,我一直以为自己的C++学的还凑合,到现在才


发现确实不行,多谢楼上的指教。最后问一下:我的想法对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 02:24 , Processed in 0.147130 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表