4.5 IDL Correlation Example for iid_is

iid_is is an IDL language extension that allows clients or servers to specify how an interface passed as a parameter is marshaled at run time, as opposed to being statically defined at compile time. See the following example.

 HRESULT CreateInstance([in]REFIID riid, 
                        [out, iid_is(riid)]Iunknown** ppUnknown);

In this example, the client calls the method, passing the interface to be invoked via the riid parameter. When returning a successful result, the server is required to marshal the ppUnknown parameter as a MInterfacePointer containing an OBJREF instance with its iid field set to the value of riid.