[ iid_is(limited-expression) ]
HRESULT CreateInstance(
[in] REFIID riid,
[out, iid_is(riid)] IUnknown ** ppvObject);
The iid_is pointer attribute specifies the IID of the OLE interface pointed to by an interface pointer. You can use iid_is in attribute lists for function parameters and for structure or union members. The stubs use the IID to determine how to marshal the interface pointer. This is useful for an interface pointer that is typed as a base class parameter.
Files that use the iid_is attribute must be compiled with the MIDL compiler in default mode, that is not using the /osf switch.