Rémi Bernon (@rbernon) commented about dlls/windows.media.mediacontrol/main.c:
- if (!IsEqualIID( riid, &IID_ISystemMediaTransportControls ))
- {
FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( riid ) );
*control = NULL;
return E_NOINTERFACE;
- }
- if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY;
- impl->ISystemMediaTransportControls_iface.lpVtbl = &media_control_vtbl;
- impl->ref = 2;
- impl->window = window;
- *control = &impl->ISystemMediaTransportControls_iface;
- TRACE( "created ISystemMediaTransportControls %p.\n", *control );
- return S_OK;
Some tests might say otherwise but in general these methods with IID parameter can and should be implemented with a pattern of `create - QueryInterface - Release`, so that you could specify any IID the created class implements:
```suggestion:-15+0 if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY; impl->ISystemMediaTransportControls_iface.lpVtbl = &media_control_vtbl; impl->ref = 1; impl->window = window;
TRACE( "created ISystemMediaTransportControls %p.\n", *control );
hr = ISystemMediaTransportControls_QueryInterface( &impl->ISystemMediaTransportControls_iface, riid, control ); ISystemMediaTransportControls_Release( &impl->ISystemMediaTransportControls_iface ); return hr; ```