查看我们的代码,我在一个 .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 派生的或不是)被标记为 dual
或 oleautomation
(或两者)它在 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/