iCAx开思网

标题: CAA : CATIA 中是如何捕捉异常的 [打印本页]

作者: HNBoTree    时间: 2006-1-11 15:02
标题: CAA : CATIA 中是如何捕捉异常的
各位高手,我想在CATIA 中进行异常处理,但是在CATIA中try 不能用
并且CATIA 自己的CATtry 确无论如何也得不到异常。
请各位高手指点。
作者: hick    时间: 2006-1-12 09:26
原帖由 HNBoTree 于 2006-1-11 15:02 发表
各位高手,我想在CATIA 中进行异常处理,但是在CATIA中try 不能用
并且CATIA 自己的CATtry 确无论如何也得不到异常。
请各位高手指点。


CATTry,CATCatch都捕做不到?
等高手回答了
作者: unnamed5    时间: 2006-1-12 12:38
同问,

如果我写了
CATTry
{
   CATDocumentServices::SaveAs(.....)
}
CATCatch(CATError, thiserror)
{
}
CATCatchOthers
{
}
CATEndTry;

如果SaveAs运行中出现异常,是不是应该抛出一个异常?
我这里说的出现异常不是说保存失败,而是说CATIA本身这个API在这情况下就有问题,出错了。

敬请高手回答。。。。。。。。。

万分感谢
作者: HNBoTree    时间: 2006-1-12 12:50
对我也说的是这方面的意思。
我发现catia 自己定义抛出异常是可以的,
如:
      CATTry{
        pCylinder = NULL;
        if(!pCylinder){
          rc = CATReturnError(.........));
          break;
        }
  
      }CATCatch(CATError, pError){
        rc = CATReturnError(......));
        break;
      }CATEndTry;


而向这样
     CATTry{
                char *pStr = "aaa";
                int a = static_cast<int> pStr;
        }
  
      }CATCatch(CATError, pError){
        rc = CATReturnError(......));
        break;
      }CATEndTry;

这样为什么不能抛出异常。
作者: unnamed5    时间: 2006-1-13 12:14
呼叫CAA达人,acoka兄等。。。。。。。。
作者: cms_nuaa    时间: 2006-1-13 12:32
不是所有的运行问题都会抛出异常的呀。
我的理解是,只有在API中封装的代码中有异常抛出的时候CATTry才能捕获异常。
我好像看到过,在帮助中有些API会有说明:抛出什么异常。
作者: HNBoTree    时间: 2006-1-14 12:08
那怎么样能够捕捉到非CATIA 的API 抛出的异常。
我现在caa 中使用其他库的API ,此API运行错误,我想获得它抛出的异常,应该怎么做?
作者: unnamed5    时间: 2006-1-14 12:45
多谢cms_nuaa兄的回答!
有点不明白的,CATDocumentServices::SaveAs(.....)这个就是CAA中的函数啊,它出错应该会抛出一样的,但是实际上啥都没有就直接crash了。。。。。。。。迷惑中
作者: xyzhu    时间: 2006-1-16 20:47
CAA不主张用异常,因此只有很少几个API抛出异常。其结果是,若要判断一个函数是否执行正确,必须看返回值,导致程序里一大堆if...else..., 大大降低了程序的可读性。不知各位有无同感
作者: acoka    时间: 2006-1-17 10:01
很讨厌看有好几层的 if/ for嵌套的程序

设计得好了话,应该可以避免
作者: saeba    时间: 2006-2-3 23:07
CAA的“异常“并不是C++通常意义上的异常(exception),CAA不推荐用C++的异常的原因是因为,1。开销太大,2。原因难查(一个异常从里面跑到外面,可能已经经历了几层,根本就不知道是哪里出的问题),3,忘了。。。这些encycropedia上面都有。
int a = static_cast<int> pStr; 这样的异常CAA根本就不去捕捉。
CAA的异常到底是什么,到.h里查查CATTry宏是什么就知道了。
(别问我,我早就没有CAA的环境了)

>>导致程序里一大堆if...else..., 大大降低了程序的可读性。
>>设计得好了话,应该可以避免

写出来大家就明白了:
do{
  if (!success1){
     break;
  }
  if (!success2){
     break;
  }
  if (!success3){
     break;
  }
  ...
}
作者: saeba    时间: 2006-2-3 23:07
CAA的“异常“并不是C++通常意义上的异常(exception),CAA不推荐用C++的异常的原因是因为,1。开销太大,2。原因难查(一个异常从里面跑到外面,可能已经经历了几层,根本就不知道是哪里出的问题),3,忘了。。。这些encycropedia上面都有。
int a = static_cast<int> pStr; 这样的异常CAA根本就不去捕捉。
CAA的异常到底是什么,到.h里查查CATTry宏是什么就知道了。
(别问我,我早就没有CAA的环境了)

>>导致程序里一大堆if...else..., 大大降低了程序的可读性。
>>设计得好了话,应该可以避免

写出来大家就明白了:
do{
  if (!success1){
     break;
  }
  if (!success2){
     break;
  }
  if (!success3){
     break;
  }
  ...
}




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3