代码之家  ›  专栏  ›  技术社区  ›  sharptooth

在IDL中将IUnknown派生接口标记为双接口有什么意义?

  •  5
  • sharptooth  · 技术社区  · 15 年前

    回顾我们的代码,我在一个.idl文件中发现了一个奇怪的定义:

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

    接口如何直接从 IUnknown 可能是双接口?如果我把 dual 属性?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Community leo1    7 年前

    this answer 关于编组的另一个问题 user voyce 指向 this article 这基本上说明了以下几点:

    当任何接口(IDispatch派生或非派生)被标记时 dual oleautomation (或两者)在 RegisterTypeLib() 调用(通常由dllregisterserver完成)。对于每个这样的接口,都会创建一个HKCR\Interface InterfaceID键,在该键下,00020424-0000-0000-C0000-00000000000000 46类被引用为代理/存根。这个类ID对应于typelib封送拆收器,也称为oleautomation封送拆收器。

        2
  •  1
  •   Kim Gräsman    15 年前

    考虑到这里的文件,我看不出这样做的原因: http://msdn.microsoft.com/en-us/library/aa366807(VS.85).aspx

    双接口识别的接口 属性必须与兼容 自动化 IDispatch。此属性不是 在DispInterfaces上允许。

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

    您可以做的是检查实现接口的代码(假设这是ATL),如果它是从 IDispatchImpl . 如果是这样的话,它实际上会响应qi 分发接口 也可以这样使用。

    另一种选择是实例化一个实现 IOurInterface 齐其为 分发接口 --如果成功,您可能无法删除它。

    其实,想想看,也许 [对偶] 技术上不要求你从 分发接口 只要实现自定义接口和 分发接口 ?