From 2cfc711a6827d194b029a1051cafe26c74ed8685 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Mon, 1 Aug 2011 10:31:49 +0200 Subject: [PATCH] dmband: Merge the IClassFactory implementations. --- dlls/dmband/dmband_main.c | 145 ++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 86 deletions(-) diff --git a/dlls/dmband/dmband_main.c b/dlls/dmband/dmband_main.c index b4863a328ed..e727ea68976 100644 --- a/dlls/dmband/dmband_main.c +++ b/dlls/dmband/dmband_main.c @@ -26,111 +26,84 @@ static HINSTANCE instance; LONG DMBAND_refCount = 0; typedef struct { - const IClassFactoryVtbl *lpVtbl; + IClassFactory IClassFactory_iface; + HRESULT WINAPI (*fnCreateInstance)(REFIID riid, void **ppv, IUnknown *pUnkOuter); } IClassFactoryImpl; /****************************************************************** - * DirectMusicBand ClassFactory + * IClassFactory implementation */ - -static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { - FIXME("- no interface IID: %s\n", debugstr_guid(riid)); - - if (ppobj == NULL) return E_POINTER; - - return E_NOINTERFACE; +static inline IClassFactoryImpl *impl_from_IClassFactory(IClassFactory *iface) +{ + return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface); } -static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface) { - DMBAND_LockModule(); +static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) +{ + if (ppv == NULL) + return E_POINTER; - return 2; /* non-heap based object */ + if (IsEqualGUID(&IID_IUnknown, riid)) + TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv); + else if (IsEqualGUID(&IID_IClassFactory, riid)) + TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv); + else { + FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv); + *ppv = NULL; + return E_NOINTERFACE; + } + + *ppv = iface; + IClassFactory_AddRef(iface); + return S_OK; } -static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface) { - DMBAND_UnlockModule(); +static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) +{ + DMBAND_LockModule(); - return 1; /* non-heap based object */ + return 2; /* non-heap based object */ } -static HRESULT WINAPI BandCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { - TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); - - return DMUSIC_CreateDirectMusicBandImpl (riid, ppobj, pOuter); +static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) +{ + DMBAND_UnlockModule(); + + return 1; /* non-heap based object */ } -static HRESULT WINAPI BandCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { - TRACE("(%d)\n", dolock); +static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, + REFIID riid, void **ppv) +{ + IClassFactoryImpl *This = impl_from_IClassFactory(iface); - if (dolock) - DMBAND_LockModule(); - else - DMBAND_UnlockModule(); - - return S_OK; + TRACE ("(%p, %s, %p)\n", pUnkOuter, debugstr_dmguid(riid), ppv); + + return This->fnCreateInstance(riid, ppv, pUnkOuter); } -static const IClassFactoryVtbl BandCF_Vtbl = { - BandCF_QueryInterface, - BandCF_AddRef, - BandCF_Release, - BandCF_CreateInstance, - BandCF_LockServer +static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock) +{ + TRACE("(%d)\n", dolock); + + if (dolock) + DMBAND_LockModule(); + else + DMBAND_UnlockModule(); + + return S_OK; +} + +static const IClassFactoryVtbl classfactory_vtbl = { + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + ClassFactory_CreateInstance, + ClassFactory_LockServer }; -static IClassFactoryImpl Band_CF = {&BandCF_Vtbl}; - - -/****************************************************************** - * DirectMusicBandTrack ClassFactory - */ - -static HRESULT WINAPI BandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { - FIXME("- no interface IID: %s\n", debugstr_guid(riid)); - - if (ppobj == NULL) return E_POINTER; - - return E_NOINTERFACE; -} - -static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface) { - DMBAND_LockModule(); - - return 2; /* non-heap based object */ -} - -static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface) { - DMBAND_UnlockModule(); - - return 1; /* non-heap based object */ -} - -static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) { - TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj); - - return DMUSIC_CreateDirectMusicBandTrack (riid, ppobj, pOuter); -} - -static HRESULT WINAPI BandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) { - TRACE("(%d)\n", dolock); - - if (dolock) - DMBAND_LockModule(); - else - DMBAND_UnlockModule(); - - return S_OK; -} - -static const IClassFactoryVtbl BandTrackCF_Vtbl = { - BandTrackCF_QueryInterface, - BandTrackCF_AddRef, - BandTrackCF_Release, - BandTrackCF_CreateInstance, - BandTrackCF_LockServer -}; - -static IClassFactoryImpl BandTrack_CF = {&BandTrackCF_Vtbl}; +static IClassFactoryImpl Band_CF = {{&classfactory_vtbl}, DMUSIC_CreateDirectMusicBandImpl}; +static IClassFactoryImpl BandTrack_CF = {{&classfactory_vtbl}, DMUSIC_CreateDirectMusicBandTrack}; /****************************************************************** * DllMain