Module: wine Branch: master Commit: a9c715fd740862d898312ac9b8f28dc7866de8f3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a9c715fd740862d898312ac9b8...
Author: Michael Stefaniuc mstefani@redhat.de Date: Fri Mar 29 16:33:25 2013 +0100
dplayx: Fix QueryInterface, AddRef and Release methods for IClassFactory.
---
dlls/dplayx/dpclassfactory.c | 31 ++++++++++++++++--------------- 1 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/dlls/dplayx/dpclassfactory.c b/dlls/dplayx/dpclassfactory.c index a933e90..537fe6b 100644 --- a/dlls/dplayx/dpclassfactory.c +++ b/dlls/dplayx/dpclassfactory.c @@ -42,9 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dplay);
typedef struct { - /* IUnknown fields */ IClassFactory IClassFactory_iface; - LONG ref; } IClassFactoryImpl;
static inline IClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface) @@ -53,26 +51,30 @@ static inline IClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface) }
static HRESULT WINAPI IClassFactoryImpl_QueryInterface(IClassFactory *iface, REFIID riid, - void **ppobj) + void **ppv) { - IClassFactoryImpl *This = impl_from_IClassFactory(iface); + TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
- FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj); + if (IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) + { + *ppv = iface; + IClassFactory_AddRef(iface); + return S_OK; + }
- return E_NOINTERFACE; + *ppv = NULL; + WARN("no interface for %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; }
static ULONG WINAPI IClassFactoryImpl_AddRef(IClassFactory *iface) { - IClassFactoryImpl *This = impl_from_IClassFactory(iface); - return InterlockedIncrement(&This->ref); + return 2; /* non-heap based object */ }
static ULONG WINAPI IClassFactoryImpl_Release(IClassFactory *iface) { - IClassFactoryImpl *This = impl_from_IClassFactory(iface); - /* static class (reference starts @ 1), won't ever be freed */ - return InterlockedDecrement(&This->ref); + return 1; /* non-heap based object */ }
static HRESULT WINAPI IClassFactoryImpl_CreateInstance(IClassFactory *iface, IUnknown *pOuter, @@ -96,9 +98,8 @@ static HRESULT WINAPI IClassFactoryImpl_CreateInstance(IClassFactory *iface, IUn
static HRESULT WINAPI IClassFactoryImpl_LockServer(IClassFactory *iface, BOOL dolock) { - IClassFactoryImpl *This = impl_from_IClassFactory(iface); - FIXME("(%p)->(%d),stub!\n",This,dolock); - return S_OK; + FIXME("(%p)->(%d),stub!\n", iface, dolock); + return S_OK; }
static const IClassFactoryVtbl DP_and_DPL_Vtbl = { @@ -109,7 +110,7 @@ static const IClassFactoryVtbl DP_and_DPL_Vtbl = { IClassFactoryImpl_LockServer };
-static IClassFactoryImpl DP_and_DPL_CF = {{&DP_and_DPL_Vtbl}, 1 }; +static IClassFactoryImpl DP_and_DPL_CF = {{&DP_and_DPL_Vtbl}};
/*******************************************************************************