Reviewing our code I've found a curious definition in one of .idl files:
[
object,
uuid(uuidhere),
dual,
nonextensible,
oleautomation,
hidden
]
interface IOurInterface : IUnknown {
//methods here
};
How can an interface derived directly from IUnknown
possibly be a dual interface? Will anything break if I remove the dual
attribute?
In this answer to another question concerning marshaling user voyce points to this article that basically states the following:
When any interface (IDispatch-derived or not) is marked either
dual
oroleautomation
(or both) it is treated specially whenRegisterTypeLib()
is invoked (which is typically done by DllRegisterServer). For each such interface an HKCR\Interface{InterfaceId} key is created under which {00020424-0000-0000-C0000-000000000046} class is referenced as proxy/stub. This class id corresponds to typelib marshaller also known as oleautomation marshaller.