[PATCH 3/4] dmband: Remove the extraneous IUnknown from DMBandTrack
Jacek Caban
jacek at codeweavers.com
Fri Jun 26 05:39:04 CDT 2015
Hi Michael,
On 06/26/15 00:18, Michael Stefaniuc wrote:
> @@ -97,22 +41,47 @@ static inline IDirectMusicBandTrack *impl_from_IDirectMusicTrack8(IDirectMusicTr
> }
>
> static HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
> - void **ppobj)
> + void **ret_iface)
> {
> IDirectMusicBandTrack *This = impl_from_IDirectMusicTrack8(iface);
> - return IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
> +
> + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
> + IsEqualIID(riid, &IID_IDirectMusicTrack8))
> + *ret_iface = iface;
> + else if (IsEqualIID(riid, &IID_IPersistStream))
> + *ret_iface = &This->PersistStreamVtbl;
> + else {
> + WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
> + return E_NOINTERFACE;
> + }
The patch is obviously fine and the problem exists in current code, but
QI is supposed to set output interface on error and such assumption is
common for callers. It would be nice to fix that when you rewrite QI ;)
Cheers,
Jacek
More information about the wine-devel
mailing list