找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1385|回复: 6

[讨论]:朋友们是如何处理 Acad::ErrorStatus 的?

[复制链接]
发表于 2003-1-23 16:18:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
写健壮的程序是程序员追求的目标,然而我发现在arx开发中对每一个Acad::ErrorStatus进行处理似乎变得不可能。
请看下面的代码:

  1. // Function name    : addEntityToModelSpace
  2. // Description      : 将 AcDbEntity 添加到 ModelSpace
  3. // Return type      : Acad::ErrorStatus
  4. // Argument         : AcDbEntity* pEntity
  5. // Argument         : BOOL bClose // AcDbEntity 加入ModelSpace后是否立即关闭
  6. Acad::ErrorStatus addEntityToModelSpace(AcDbEntity* pEntity,BOOL bClose)
  7. {
  8.     Acad::ErrorStatus     es = Acad::eOk;
  9.     AcDbBlockTable        *pBlockTable;
  10.     AcDbBlockTableRecord  *pBlockTableRecord;
  11.    
  12.     /* es = */acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
  13.    
  14.     /* es = */pBlockTable->close();
  15.    
  16.     /* es = */pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
  17.    
  18.     es = pBlockTableRecord->appendAcDbEntity(pEntity);
  19.    
  20.     /* es = */pBlockTableRecord->close();
  21.     if (bClose)
  22.     {
  23.         /* es = */pEntity->close();
  24.     }
  25.         
  26.     return es;
  27. }
[/COLOR]
如果对每一个 es 进行处理,程序会变成怎样一个模样?!
代码的可读性会变得极差。
我只处理了一个。

朋友们你们通常是如何处理的?

:)
看了fyje 的C++ 异常有感,其实是困惑我多时的疑问.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-1-23 16:35:45 | 显示全部楼层

Re: [讨论]:朋友们是如何处理 Acad::ErrorStatus 的?

最初由 李四 发布
[B]写健壮的程序是程序员追求的目标,然而我发现在arx开发中对每一个Acad::ErrorStatus进行处理似乎变得不可能。
请看下面的代码:
[code]
// Function name    : addEntityToModelSpace
// Descriptio... [/B]


我一般也是仅仅处理了 eOk ,进行两个分支,其他的都没有考虑。

比如对于打开对象操作,如果不返回eOk, 那么ACAD也没有运行下去的必要的:)

不过都是在程序完全调试好后的。

在调试的过程中,如果有问题,还是要看看es返回是什么的,比如wasOpenForWrite 等等
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2003-1-24 09:09:58 | 显示全部楼层
有时可能需要多看帮助或多测试
我在R14下遇到下列问题,
ads_handent(hand,en);
er=acdbGetObjectId(id, en);
if(er!=Acad::eOk) {
  return;//注1:此处必须!
  }
er=acdbOpenObject(pE, id, AcDb::kForRead);
//acdbOpenObject同样返回Acad::ErrorStatus
//若没有注1,只要hand合法,不管实体存在与否
//er均为Acad::eOk;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-26 23:22:01 | 显示全部楼层
用智能指针 smart pointer, 可以有效处理
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-27 15:49:15 | 显示全部楼层
rave 斑竹能否给段演示代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-29 00:55:04 | 显示全部楼层
最初由 i_want_2 发布
[B]rave 斑竹能否给段演示代码 [/B]

  1. [color=blue]#include "dbobjptr.h"[/color]  
  2. //...
  3. Acad::ErrorStatus addToModelSpace(AcDbEntity* pEntity,BOOL bClose)
  4. {
  5.         Acad::ErrorStatus es;

  6.         [color=blue]AcDbBlockTableRecordPointer spBlkRcd(ACDB_MODEL_SPACE, acdbHostApplicationServices()->workingDatabase(), AcDb::kForWrite);[/color]
  7.         es = spBlkRcd.openStatus();
  8.         if (es == Acad::eOk){
  9.                 es = spBlkRcd->appendAcDbEntity(pEntity);
  10.                 if ((es == Acad::eOk) && (bClose))
  11.                         es = pEntity->close();
  12.         }

  13.         return es;
  14. }
复制代码

含错误处理,代码也比较简洁
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 192个

财富等级: 日进斗金

发表于 2003-1-29 13:43:49 | 显示全部楼层
AcDbBlockTableRecordPointer 在那定义的,怎么没有啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-20 18:32 , Processed in 0.380563 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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