diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c index f5199fdc4a5..9c550eb13ac 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c @@ -724,7 +724,7 @@ static IClassFactoryImpl DSOUND_CF[] = { { { &DSCF_Vtbl }, &CLSID_DirectSoundCapture, DSOUND_CaptureCreate }, { { &DSCF_Vtbl }, &CLSID_DirectSoundCapture8, DSOUND_CaptureCreate8 }, { { &DSCF_Vtbl }, &CLSID_DirectSoundFullDuplex, DSOUND_FullDuplexCreate }, - { { &DSCF_Vtbl }, &CLSID_DirectSoundPrivate, (FnCreateInstance)IKsPrivatePropertySetImpl_Create }, + { { &DSCF_Vtbl }, &CLSID_DirectSoundPrivate, IKsPrivatePropertySetImpl_Create }, { { NULL }, NULL, NULL } }; diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h index f8e5ca681b5..0d2cf758c9d 100644 --- a/dlls/dsound/dsound_private.h +++ b/dlls/dsound/dsound_private.h @@ -254,7 +254,7 @@ struct IDirectSoundCaptureBufferImpl int nrofnotifies; }; -HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, IKsPropertySet **piks) DECLSPEC_HIDDEN; +HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, void **ppv) DECLSPEC_HIDDEN; /******************************************************************************* */ diff --git a/dlls/dsound/propset.c b/dlls/dsound/propset.c index 242b23740b7..eb4c1959d54 100644 --- a/dlls/dsound/propset.c +++ b/dlls/dsound/propset.c @@ -619,23 +619,24 @@ static const IKsPropertySetVtbl ikspvt = { IKsPrivatePropertySetImpl_QuerySupport }; -HRESULT IKsPrivatePropertySetImpl_Create( - REFIID riid, - IKsPropertySet **piks) +HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, void **ppv) { IKsPrivatePropertySetImpl *iks; - TRACE("(%s, %p)\n", debugstr_guid(riid), piks); + HRESULT hr; - if (!IsEqualIID(riid, &IID_IUnknown) && - !IsEqualIID(riid, &IID_IKsPropertySet)) { - *piks = 0; - return E_NOINTERFACE; + TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); + + iks = HeapAlloc(GetProcessHeap(), 0, sizeof(*iks)); + if (!iks) { + WARN("out of memory\n"); + return DSERR_OUTOFMEMORY; } - iks = HeapAlloc(GetProcessHeap(),0,sizeof(*iks)); iks->ref = 1; iks->IKsPropertySet_iface.lpVtbl = &ikspvt; - *piks = &iks->IKsPropertySet_iface; - return S_OK; + hr = IKsPropertySet_QueryInterface(&iks->IKsPropertySet_iface, riid, ppv); + IKsPropertySet_Release(&iks->IKsPropertySet_iface); + + return hr; }