windows - 在 IDL 中将 IUnknown 派生接口(interface)标记为双重接口(interface)有什么意义吗?

标签 windows com com-interop idl midl

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

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

直接从 IUnknown 派生的接口(interface)怎么可能是双重接口(interface)?如果我删除 dual 属性,是否会出现任何问题?

最佳答案

this answer关于编码的另一个问题user voyce指向 this article基本上说明了以下内容:

当任何接口(interface)(IDispatch 派生的或不是)被标记为 dualoleautomation (或两者)它在 RegisterTypeLib() 时被特殊对待被调用(通常由 DllRegisterServer 完成)。对于每个这样的接口(interface),都会创建一个 HKCR\Interface{InterfaceId} 键,在该键下 {00020424-0000-0000-C0000-000000000046} 类被引用为代理/ stub 。这个类 id 对应于 typelib marshaller,也称为 oleautomation marshaller。

关于windows - 在 IDL 中将 IUnknown 派生接口(interface)标记为双重接口(interface)有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1636148/

相关文章:

c# - 无法将 'microsoft.Office.Interop.Excel.ApplicationClass' 类型的 COM 对象转换为 'microsoft.Office.Interop.Excel.Application'”

windows - WMIC命令批量输出非UTF-8文本文件

c - 如何通过 COM 接口(interface)以编程方式激活 OLE 控件?

windows - 无法将 Windows 服务凭据更改为 gsma

c# - 将 COM 对象添加到托管代码

c++ - 为什么在 Windows API 中调用 CoCreateInstance 函数时没有类型不匹配?

c# - 如何将 IDispatch* 放入托管代码中

c# - 在任何情况下,我们在处理变量时必须在 C# 中将变量设置为 null 吗?

windows - 想要调整在 Windows 中运行的其他应用程序的大小

windows - 在 cygwin/msys bash 下使用 `pkg-config` 作为命令行参数