求大家看看这是怎么回事!!!
还是实现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
---------------------------
确定
---------------------------
不知是怎么回事,求大家指点一下吧!!! 错误在于 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]