明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1715|回复: 1

问一个ARX的调试问题!

[复制链接]
发表于 2002-12-26 03:50 | 显示全部楼层 |阅读模式
在程序中加了断点后,按F5进行debug时,为什么程序运行时有时在断点处中断,有时却不中断,这是怎么回事呀?
还有一个问题,我在程序中用ads命令绘制的实体如line还有人为将其加入模型空间吗?
最后就是我从AcDbEntity派生了一个类,但在操纵块表时appendAcDbEntity(objId,pEntity)语句程序出错(奇怪的是debug时不出错,直接执行时出错),代码部分如下:
void addToModelSpace(AcDbObjectId &objId, AcDbEntity* pEntity)
{
    ads_printf("\nEnter addToModelSpace\n");
        Acad::ErrorStatus es;
        AcDbBlockTable   *pBlockTable;
        AcDbDatabase *pDb=acdbHostApplicationServices()->workingDatabase();
        es = pDb->getBlockTable(pBlockTable,AcDb::kForRead);
        if (es != Acad::eOk)
                return;       
        AcDbBlockTableRecord *pSpaceRecord;
        es = pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord,AcDb::kForWrite,FALSE);
        if (es != Acad::eOk)   {
                pBlockTable->close();
                return;
        }
        ads_printf("\nTest1 for addToModelSpace\n");
        pEntity->setDatabaseDefaults(pDb);
        ads_printf("\nTest3 for addToModelSpace\n");
        es = pBlockTable->close();
        if (es != Acad::eOk)
                acrx_abort("\nUnable to close block table");  
        ads_printf("\nTest1.1 for addToModelSpace\n");
        es = pSpaceRecord->appendAcDbEntity(objId,pEntity);
        ads_printf("\nTest1.2 for addToModelSpace\n");
        if (es != Acad::eOk) {
                delete pEntity;
                return;
        }       
        ads_printf("\nTest2 for addToModelSpace\n");
        if (es != Acad::eOk)
                acrx_abort("\nUnable to close block table record");
       

        ads_printf("\nExit addToModelSpace\n");
        return ;
}
我的派生类中有一个AcDbPolyline*的成员变量,会不会是这个原因造成的?
多谢了.
发表于 2002-12-27 11:34 | 显示全部楼层

类初始化宏和类实现宏调用

根据我的经验,可能您从AcDbEntity派生类时,未能正确使用自定义类的实现宏。AsdkCAreaLine::rxInit();仅仅只是类初始化。
在类定义class DLLIMPEXP AsdkCAreaLine : public AcDbEntity中首先要做类声明,可调用宏ACRX_DECLARE_MEMBERS(weltopMyclassObj);
这您已做好。
然后,实现自定义类时,要使用下列三个宏之一:
ACRX_NO_CONS_DEFINE_MEMBERS()  该宏用于抽象类和不能实例化的类。
ACRX_CONS_DEFINE_MEMBERS()  该宏用于瞬态类,可以实例化,但不能保存到文件中
ACRX_DXF_DEFINE_MEMBERS()  该宏用于能进行DWG和DXF文件读写操作的类。
其中最后一个宏最常用,也是容易出错的宏。
在2000和2002中该宏定义为:
ACRX_DXF_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, DWG_VERSION,   MAINTENANCE_VERSION, PROXY_FLAGS, DXF_NAME, APP)
其中,参数定义如下:
CLASS_NAME:自定义类名,此例为weltopMyclassObj
PARENT_NAME:派生父类名,此例为AcDbObject
PROXY_FLAGS:类对象代理标志,你若不使用代理,此参数为0
DXF_NAME:DXF文件名,可任意指定,据AUTODESK技术支持人员说要用大写字母,不过我写过一个程序用了大小写混和,好象没出问题
APP:应用程序名,注意:一个应用程序中有多个自定义类时,DXF_NAME和APP参数应该保持一致。
DWG_VERSION,   MAINTENANCE_VERSION:分别指类适用的ACAD最高和最低版本,在ARX 2000和2002中必须填写这两个参数,我不知道这两个参数具体如何使用,我在程序中分别指定为AcDb::kDHL_CURRENT和AcDb::kMReleaseCurrent
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 00:23 , Processed in 0.287655 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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