MFC中void函数如何处理HRESULT比较好

张琪Samuel 2009-09-09 08:35:08
比如CTreeView::OnTvnSelChanged之类的MFC消息映射函数都是void类型的,但是在函数内部需要调用COM组件,从而需要处理HRESULT类型的返回值。由于CTreeView::OnTvnSelChanged是void的,如果COM调用出错,便所以无法继续往上传递。貌似只能使用C++ Exception或者SEH,但是又不知道如何handle那些异常。

希望有经验的介绍一下,在这种情况下如何进行返回值处理比较好。
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq539929779 2009-09-10
  • 打赏
  • 举报
回复
向外POST消息得了!呵
jameshooo 2009-09-09
  • 打赏
  • 举报
回复
COM错误就是错误,没有异常,你该保存某些错误状态,可以提示用户,可以写日志,可以交给错误处理函数,也可以函数内直接处理了。
CslQy 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qisamuelzhang 的回复:]
那么有什么比较好的方法在消息函数里面处理错误或者异常,比如提示内部错误并直接结束程序?
[/Quote]

本身MFC处理消息大部分都是void的,也是为了不影响正常的消息传递。如果想要进行你上面所说的内容,直接打出个MSG,然后给程序POST的退出的MSG就可以了。
张琪Samuel 2009-09-09
  • 打赏
  • 举报
回复
那么有什么比较好的方法在消息函数里面处理错误或者异常,比如提示内部错误并直接结束程序?
晒月光的青蛙 2009-09-09
  • 打赏
  • 举报
回复
消息函数一般都是void的,他里面的错误就不往外传了
arong1234 2009-09-09
  • 打赏
  • 举报
回复
如果你想向上传,所谓的“上”是谁?你传递给谁?貌似这种事件处理函数之上就是系统的消息循环了,本来就不该处理这些异常
[Quote=引用 3 楼 qisamuelzhang 的回复:]
谢谢楼上两位,你们的意思是说OnTvnSelChanged以上就没有办法handle异常或者返回值了?加log或者assert并不是错误或者异常的处理方法。
[/Quote]
xylicon 2009-09-09
  • 打赏
  • 举报
回复
如果我遇到类似的情况,我能想到的也只可能是抛出异常处理。

或者做类似GetLastError的函数,通过GetLastError值来判断。
张琪Samuel 2009-09-09
  • 打赏
  • 举报
回复
谢谢楼上两位,你们的意思是说OnTvnSelChanged以上就没有办法handle异常或者返回值了?加log或者assert并不是错误或者异常的处理方法。
oyljerry 2009-09-09
  • 打赏
  • 举报
回复
要么就在OnTvnSelChanged内部处理com返回的各种错误等,然后OnTvnSelChanged 直接返回,可以增加一些调试log等记录出错的信息
cattycat 2009-09-09
  • 打赏
  • 举报
回复
可以自定义消息,在这个函数中,判断结果,如果出错,发送消息,在消息处理的函数中处理错误。
不知道行不行。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧