在IDL中将IUnknown派生的接口标记为双重的任何意义?
-
06-07-2019 - |
题
查看我们的代码我在其中一个.idl文件中找到了一个好奇的定义:
[
object,
uuid(uuidhere),
dual,
nonextensible,
oleautomation,
hidden
]
interface IOurInterface : IUnknown {
//methods here
};
如何直接从 IUnknown
派生的接口可能是双接口?如果我删除 dual
属性会有什么破坏吗?
解决方案
其他提示
鉴于此处的文档,我看不出有什么可行的原因: http://msdn.microsoft.com/en-us /library/aa366807(VS.85).aspx
双重识别的接口 属性必须兼容 自动化和衍生自 IDispatch接口。这个属性不是 在调度接口上允许。
可能是 [dual]
属性隐式地将 IDispatch
添加到接口。
如果它来自 IDispatchImpl
,那么你可以做的是检查实现接口的代码(假设这是ATL)。如果是这样,它实际上对 IDispatch
的QI做出响应,并且可以这样使用。
另一种方法是实例化一个实现 IOurInterface
的对象,并为 IDispatch
进行QI - 如果成功,你可能无法删除它。
实际上,想一想,也许 [dual]
在技术上并不要求你从 IDispatch
派生,只要你实现自定义界面和<代码>的IDispatch 代码>
不隶属于 StackOverflow