static HRESULT WINAPI PrimaryBufferImpl_QueryInterface( LPDIRECTSOUNDBUFFER iface,REFIID riid,LPVOID *ppobj ) { IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer(iface); DirectSoundDevice *device = This->device; TRACE("(%p,%s,%p)\n", iface, debugstr_guid(riid), ppobj); if (ppobj == NULL) { WARN("invalid parameter\n"); return E_INVALIDARG; } *ppobj = NULL; /* assume failure */ if ( IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectSoundBuffer) ) { IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER)This); *ppobj = This; return S_OK; } /* DirectSoundBuffer and DirectSoundBuffer8 are different and */ /* a primary buffer can't have a DirectSoundBuffer8 interface */ if ( IsEqualGUID( &IID_IDirectSoundBuffer8, riid ) ) { WARN("app requested DirectSoundBuffer8 on primary buffer\n"); return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) { ERR("app requested IDirectSoundNotify on primary buffer\n"); /* FIXME: should we support this? */ return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSound3DBuffer, riid ) ) { ERR("app requested IDirectSound3DBuffer on primary buffer\n"); return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSound3DListener, riid ) ) { if (!device->listener) IDirectSound3DListenerImpl_Create(device, &device->listener); if (device->listener) { *ppobj = device->listener; IDirectSound3DListener_AddRef((LPDIRECTSOUND3DLISTENER)*ppobj); return S_OK; } WARN("IID_IDirectSound3DListener failed\n"); return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) { FIXME("app requested IKsPropertySet on primary buffer\n"); return E_NOINTERFACE; } FIXME( "Unknown IID %s\n", debugstr_guid( riid ) ); return E_NOINTERFACE; }
/* IUnknown methods */ static HRESULT WINAPI IDirectSound3DListenerImpl_QueryInterface( LPDIRECTSOUND3DLISTENER iface, REFIID riid, LPVOID *ppobj) { IDirectSound3DListenerImpl *This = (IDirectSound3DListenerImpl *)iface; TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); if (ppobj == NULL) { WARN("invalid parameter\n"); return E_INVALIDARG; } *ppobj = NULL; /* assume failure */ if ( IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectSound3DListener ) ) { IDirectSound3DListener_AddRef((LPDIRECTSOUND3DLISTENER)This); *ppobj = This; return S_OK; } if ( IsEqualGUID(riid, &IID_IDirectSoundBuffer) ) { *ppobj = &This->device->primary->IDirectSoundBuffer8_iface; IDirectSoundBuffer8_AddRef(&This->device->primary->IDirectSoundBuffer8_iface); return S_OK; } FIXME( "Unknown IID %s\n", debugstr_guid( riid ) ); return E_NOINTERFACE; }
static HRESULT WINAPI PrimaryBufferImpl_QueryInterface(IDirectSoundBuffer *iface, REFIID riid, void **ppobj) { IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer(iface); TRACE("(%p,%s,%p)\n", iface, debugstr_guid(riid), ppobj); if (ppobj == NULL) { WARN("invalid parameter\n"); return E_INVALIDARG; } *ppobj = NULL; /* assume failure */ if ( IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectSoundBuffer) ) { IDirectSoundBuffer_AddRef(iface); *ppobj = iface; return S_OK; } /* DirectSoundBuffer and DirectSoundBuffer8 are different and */ /* a primary buffer can't have a DirectSoundBuffer8 interface */ if ( IsEqualGUID( &IID_IDirectSoundBuffer8, riid ) ) { WARN("app requested DirectSoundBuffer8 on primary buffer\n"); return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) { ERR("app requested IDirectSoundNotify on primary buffer\n"); /* FIXME: should we support this? */ return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSound3DBuffer, riid ) ) { ERR("app requested IDirectSound3DBuffer on primary buffer\n"); return E_NOINTERFACE; } if ( IsEqualGUID( &IID_IDirectSound3DListener, riid ) ) { *ppobj = &This->IDirectSound3DListener_iface; IDirectSound3DListener_AddRef(&This->IDirectSound3DListener_iface); return S_OK; } if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) { *ppobj = &This->IKsPropertySet_iface; IKsPropertySet_AddRef(&This->IKsPropertySet_iface); return S_OK; } FIXME( "Unknown IID %s\n", debugstr_guid( riid ) ); return E_NOINTERFACE; }