gpt4 book ai didi

com - ISupportErrorInfo 的实现 - 这意味着什么?

转载 作者:行者123 更新时间:2023-12-01 23:43:52 25 4
gpt4 key购买 nike

ISupportErrorInfo 接口(interface)是什么意思?我有点无法理解它。来自 MSDN:

This interface ensures that error information can be propagated up the call chain correctly. Automation objects that use the error handling interfaces must implement ISupportErrorInfo.

This method indicates whether or not an interface supports the IErrorInfo interface.

HRESULT InterfaceSupportsErrorInfo(
REFIID riid
);

InterfaceSupportsErrorInfo 中返回 S_OK 意味着什么?是否应该为所有接口(interface)返回 S_OK?只是一些?

最佳答案

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

为此,您实现 ISuportErrorInfo::InterfaceSupportsErrorInfo应该返回S_OK仅适用于类中实际使用 SetErrorInfo 的接口(interface)将错误信息返回给调用者,并且这些接口(interface)。

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

  • 调用 QueryInterface关于IFoo获取 ISupportErrorInfo 的指针正在实现 IFoo 的对象的接口(interface)

  • 如果被调用的对象没有实现ISupportErrorInfo ,那么调用者将会有处理错误的基础上 HRESULT值,或将其传递到调用堆栈。

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

  • 如果 InterfaceSupportsErrorInfo返回S_OK ,然后调用者此时知道它可以检索更详细的信息关于错误,请调用 GetErrorInfo 。如果InterfaceSupportsErrorInfo返回S_FALSE ,调用者可以假设被调用的接口(interface)不提供详细的错误信息,并且必须依赖返回的 HRESULT 来弄清楚发生了什么。

这个有点令人困惑/复杂的错误处理 API 的原因似乎是为了灵 active (据我所知,这毕竟是 COM ;)。通过这样的设计,一个类可以支持多个接口(interface),但并不是每个接口(interface)都需要使用SetErrorInfo从其方法返回错误信息。您可以通过 SetErrorInfo 让您的类上的某些选择接口(interface)返回详细的错误信息,而其他接口(interface)可以继续正常使用HRESULT s 来指示错误。

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

关于com - ISupportErrorInfo 的实现 - 这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/172942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com