请说出你的理由,最好不要照搬书上的理论,给出自己亲身经历比较好。我个人喜欢THROW异常,这样使异常处理比较统一且方便。但是我不知道如果THROW异常时,在DCOM的环境下是否会有问题。

解决方案 »

  1.   

    DCOM下有问题,因为THROW异常必须在一个进程内处理掉
      

  2.   

    HRESULT这个东东之所以会诞生到这个世界,就是解决DCOM的返回值问题。
    COM规范里说,不能让一个异常逃到这个组件之外,因为你不能保证调用这个组件的语言也支持异常特性。所以,异常只能在COM组件内部玩,出了COM就行不通了。
      

  3.   

    假如我能保证“调用这个组件的语言也支持异常”,并且我的COM只是进程内的COM,有问题吗?
      

  4.   

    没问题,不过不必这么做。
    VC用#import导入生成的封装代码,自动将返回出错HRESULT值的调用转成抛出一个异常,BCB也是如此。所以你不必冒这个险。
      

  5.   

    VC用#import生出来的是智能指针,有时候我可能只想用原生的接口指针的。
      

  6.   

    不同语言对异常的实现不一样,即使客户和服务器是同一语言,好象互相也不能捕获对方的异常。
    COM服务器出现异常时,你应该返回一个错误值,并且用IError接口(如果你用ATL,则CComCoClass::Error)向客户报告错误。