查看我们的代码我在其中一个.idl文件中找到了一个好奇的定义:

[
    object,
    uuid(uuidhere),
    dual,
    nonextensible,
    oleautomation,
    hidden
]
interface IOurInterface : IUnknown {
    //methods here
};

如何直接从 IUnknown 派生的接口可能是双接口?如果我删除 dual 属性会有什么破坏吗?

有帮助吗?

解决方案

此答案关于编组的另一个问题用户voyce 指向这篇文章基本上陈述如下:

当任何接口(IDispatch派生或非派生)被标记为 dual oleautomation (或两者)时,在 RegisterTypeLib()(通常由DllRegisterServer完成)。对于每个这样的接口,创建HKCR \ Interface {InterfaceId}密钥,在该密钥下,{00020424-0000-0000-C0000-000000000046}类被引用为代理/存根。此类ID对应于typelib marshaller,也称为oleautomation marshaller。

其他提示

鉴于此处的文档,我看不出有什么可行的原因: http://msdn.microsoft.com/en-us /library/aa366807(VS.85).aspx

  

双重识别的接口   属性必须兼容   自动化和衍生自   IDispatch接口。这个属性不是   在调度接口上允许。

可能是 [dual] 属性隐式地将 IDispatch 添加到接口。

如果它来自 IDispatchImpl ,那么你可以做的是检查实现接口的代码(假设这是ATL)。如果是这样,它实际上对 IDispatch 的QI做出响应,并且可以这样使用。

另一种方法是实例化一个实现 IOurInterface 的对象,并为 IDispatch 进行QI - 如果成功,你可能无法删除它。

实际上,想一想,也许 [dual] 在技术上并不要求你从 IDispatch 派生,只要你实现自定义界面和<代码>的IDispatch

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top