大家认为:在COM的方法里,到底是使用THROW一个异常,还是使用返回值好? 请说出你的理由,最好不要照搬书上的理论,给出自己亲身经历比较好。我个人喜欢THROW异常,这样使异常处理比较统一且方便。但是我不知道如果THROW异常时,在DCOM的环境下是否会有问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DCOM下有问题,因为THROW异常必须在一个进程内处理掉 HRESULT这个东东之所以会诞生到这个世界,就是解决DCOM的返回值问题。COM规范里说,不能让一个异常逃到这个组件之外,因为你不能保证调用这个组件的语言也支持异常特性。所以,异常只能在COM组件内部玩,出了COM就行不通了。 假如我能保证“调用这个组件的语言也支持异常”,并且我的COM只是进程内的COM,有问题吗? 没问题,不过不必这么做。VC用#import导入生成的封装代码,自动将返回出错HRESULT值的调用转成抛出一个异常,BCB也是如此。所以你不必冒这个险。 VC用#import生出来的是智能指针,有时候我可能只想用原生的接口指针的。 不同语言对异常的实现不一样,即使客户和服务器是同一语言,好象互相也不能捕获对方的异常。COM服务器出现异常时,你应该返回一个错误值,并且用IError接口(如果你用ATL,则CComCoClass::Error)向客户报告错误。 简单socket 通信问题,很纠结! clistctrl方法setItemtext的疑问,见正文! 关于mfc里的AfxInitThread()的问题! 哪位兄弟有CMPP协议的代码吗? CString使用要注意什么问题? xml中保存有接口,需要怎么得倒接口 我的开源项目终于在SounceForge中立有一席之地了! 如何用VC++实现视频的单帧播放 谁有《设计模式》此书的源代码 如何在CListCtrl的项中通过单击获得文本输入或更改项目中的文本. VC+ACCESS问题。 关于动态连接库的问题,请大家执教
COM规范里说,不能让一个异常逃到这个组件之外,因为你不能保证调用这个组件的语言也支持异常特性。所以,异常只能在COM组件内部玩,出了COM就行不通了。
VC用#import导入生成的封装代码,自动将返回出错HRESULT值的调用转成抛出一个异常,BCB也是如此。所以你不必冒这个险。
COM服务器出现异常时,你应该返回一个错误值,并且用IError接口(如果你用ATL,则CComCoClass::Error)向客户报告错误。