- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我在 OS X 中构建菜单栏项时找到了一些示例代码。它使用了单个 |我不确定它的实际含义。 (我想做的是在菜单项左键单击时调用一个函数,但在右键单击时显示菜单) 这是我的代码 //Get refere
为什么它在第 23 行抛出编译错误。'a' 是 Apple 类的对象,col 是包含 Apple 对象的列表,但它仍然是抛出下面提到的编译错误: 类型 Collection 中的方法 add(capt
我有一个类A,它扩展了抽象类B。 让B有一个 protected 字段值 我想在 A 中使用这个字段。如果 A 没有 value,我可以编写 this.value 从 B 获取它。 与super.va
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下: 定义的主键不是最小键:主键是最小的 super 键。如果
var aa: (()?) = (john.residence?.address = someAddress) var bb: ()? = john.residence?.printNumberOfR
我对 jquery 的可重用插件有点陌生。我已经多次遇到这段代码,但无法弄清楚究竟发生了什么。 (function( $ ){ ... })( jQuery ); 谁能帮我解答一下吗? 最佳答案
这个问题已经有答案了: int foo (int argc, ...) vs int foo() vs int foo(void) in C (4 个回答) 已关闭 9 年前。 所以我最近在 Hack
typedef struct Element { struct Element *next; void *data; } Element; 在 pop 函数中,(!(elem = *s
数据加载两次...意味着 AsyncTask onPostExecute 加载相同的数据两次?我的 AsyncTask onPostExecute 运行两次它加载相同的数据...我正在运行异步任务以从
运行“yomeanjs”时,我无限期地挂起“这可能需要几分钟”。当我尝试运行 grunt 时,它失败了,与 npm start 相同。 我使用的是 Win 8.1,并安装了最新的 Node 和 Mon
我正在看 big nerd ranch 的“Android Programming”中的这个页面,我对下面的句子感到困惑。它声明“当 Activity 被隐藏时, Activity 对象不存在”。这让
是否 const vector意味着它的元素是const也一样? 在下面的代码中, v[0].set (1234);在 void g ( const vector & v )产生编译器错误 const
我是 xml 相关事物的新手 我无法理解: SelectNodes(@"//Form/*[. = 'on']"); 注:SelectNodes是 XmlNode 的函数.(与 XmlDocument
我想方便地控制命令行参数。因此我想使用 ShellLib。 我的代码是这样的: ... #include ... EFI_STATUS EFIAPI UefiMain ( EFI_HANDL
着眼于更正 Debian 上/etc/init.d/hostapd 中的一个问题。但是,我不知道这行代码是做什么的,也不知道它是如何工作的 [ -n "$DAEMON_CONF" ] || exit
有没有人遇到过类似我下图所示的情况? 我有一个变量 landingBools.didSlowPast40Knots(正如您从调试打印输出中看到的那样)为假,但出于某种原因,if 语句评估为真。 知道为
我设法使用 flexbox 和一些非常基本的 JavaScript 为自己构建了三个下拉菜单。 因为我不太了解,所以我使用了一个简单的函数三次,而不是使用参数、变量和其他东西。我将其称为丑陋的“蛮力”
这周刚开始学习 javascript。我有一个非常菜鸟的问题。 exports.displayName = (undefined: ?string); 在 React Native 中意味着什么? 这
我正在阅读有关 NaN here 的内容它说: A comparison with a NaN always returns an unordered result even when compari
编码格式:引入*表示“从头开始重复”。例子。输入-{a,b,a,b,c,a,b,a,b,c,d}可以写成{a,b,*,c,*,d}。输出:5;例如2:ABCABCE,输出- 5。 这里*表示从头开始重
我是一名优秀的程序员,十分优秀!