当前位置:  开发笔记 > 编程语言 > 正文

ISupportErrorInfo的实现 - 这是什么意思?

如何解决《ISupportErrorInfo的实现-这是什么意思?》经验,为你挑选了1个好方法。

什么是ISupportErrorInfo接口是什么意思?我理解它有点不知所措.来自MSDN:

此接口可确保错误信息可以正确地在调用链中传播.使用错误处理接口的自动化对象必须实现ISupportErrorInfo.

此方法指示接口是否支持IErrorInfo接口.

HRESULT InterfaceSupportsErrorInfo(
  REFIID riid
);

返回S_OK意味着什么InterfaceSupportsErrorInfo?你应该为所有接口返回S_OK吗?一些?



1> Mike Spross..:

我对它的理解(基于一些相关的MSDN页面)是通过实现ISupportErrorInfo,您指示您的类上的一个或多个接口通过调用返回错误信息SetErrorInfo,而不是仅返回失败HRESULT.

为此,您的实现ISuportErrorInfo::InterfaceSupportsErrorInfoS_OK仅返回您的类上实际用于SetErrorInfo将错误信息返回给调用者的那些接口,并且仅返回那些接口.

例如,假设您有一个实现您编写的IFoo具有DoSomething方法的接口的类.如果其他人创建了您的类和调用的实例,IFoo::DoSomething如果DoSomething返回失败,他们应该执行以下操作HRESULT(从各种MSDN页面解释,但我从这里开始:http://msdn.microsoft.com/en-us/ library/ms221510.aspx):

调用QueryInterfaceIFoo指针,以获得ISupportErrorInfo对于正在实施的对象接口IFoo

如果被调用的对象没有实现ISupportErrorInfo,则调用者必须根据该HRESULT值处理错误 ,或者将其传递给调用堆栈.

如果被调用对象确实实现了ISupportErrorInfo,那么调用者应该调用ISupportErrorInfo::InterfaceSupportsErrorInfo,REFIID为返回错误的接口传入一个.在这种情况下,接口的DoSomething方法IFoo返回错误,因此您将传递REFIID_IFoo(假设已定义)InterfaceSupportsErrorInfo.

如果InterfaceSupportsErrorInfo 返回S_OK,则调用者此时知道它可以通过调用来检索有关错误的更多详细信息 GetErrorInfo.如果InterfaceSupportsErrorInfo返回S_FALSE,调用者可以假设被调用的接口不提供详细的错误信息,并且必须依赖返回的HRESULT来确定发生了什么.

这种有点令人困惑/错综复杂的错误处理API的原因似乎是灵活性(至于我无论如何都可以告诉我.毕竟这 COM;).使用此设计,类可以支持多个接口,但并不是每个接口都需要用于SetErrorInfo从其方法返回错误信息.您可以在类上选择某些选择返回详细错误信息SetErrorInfo,而其他接口可以继续使用常规HRESULTs来指示错误.

总之,ISupportErrorInfo接口是一种通知调用代码的方法,您的类实现的至少一个接口可以返回详细的错误信息,并且该InterfaceSupportsErrorInfo方法告诉调用者给定接口是否是这些接口之一.如果是,则调用者可以通过调用检索详细的错误信息GetErrorInfo.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有