R – Any sense in marking an IUnknown-derived interface as dual in IDL

comcom-interopidlmidlwindows

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?

Best Answer

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 or oleautomation (or both) it is treated specially when RegisterTypeLib() 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.

Related Topic