From: Jacek Caban Subject: [PATCH 4/7] ole32: Use generic class factory for composite moniker. Message-Id: Date: Tue, 21 Feb 2017 13:19:39 +0100 Signed-off-by: Jacek Caban --- dlls/ole32/compositemoniker.c | 47 ++----------------------------------------- dlls/ole32/moniker.h | 2 +- dlls/ole32/oleproxy.c | 13 +++++++++++- 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c index 579fe4c..75d97fa 100644 --- a/dlls/ole32/compositemoniker.c +++ b/dlls/ole32/compositemoniker.c @@ -1989,30 +1989,8 @@ MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkComm return E_NOTIMPL; } -static HRESULT WINAPI CompositeMonikerCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) -{ - *ppv = NULL; - if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory)) - { - *ppv = iface; - IClassFactory_AddRef(iface); - return S_OK; - } - return E_NOINTERFACE; -} - -static ULONG WINAPI CompositeMonikerCF_AddRef(LPCLASSFACTORY iface) -{ - return 2; /* non-heap based object */ -} - -static ULONG WINAPI CompositeMonikerCF_Release(LPCLASSFACTORY iface) -{ - return 1; /* non-heap based object */ -} - -static HRESULT WINAPI CompositeMonikerCF_CreateInstance(LPCLASSFACTORY iface, - LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv) +HRESULT WINAPI CompositeMoniker_CreateInstance(IClassFactory *iface, + IUnknown *pUnk, REFIID riid, void **ppv) { IMoniker* pMoniker; HRESULT hr; @@ -2034,24 +2012,3 @@ static HRESULT WINAPI CompositeMonikerCF_CreateInstance(LPCLASSFACTORY iface, return hr; } - -static HRESULT WINAPI CompositeMonikerCF_LockServer(LPCLASSFACTORY iface, BOOL fLock) -{ - FIXME("(%d), stub!\n",fLock); - return S_OK; -} - -static const IClassFactoryVtbl CompositeMonikerCFVtbl = -{ - CompositeMonikerCF_QueryInterface, - CompositeMonikerCF_AddRef, - CompositeMonikerCF_Release, - CompositeMonikerCF_CreateInstance, - CompositeMonikerCF_LockServer -}; -static const IClassFactoryVtbl *CompositeMonikerCF = &CompositeMonikerCFVtbl; - -HRESULT CompositeMonikerCF_Create(REFIID riid, LPVOID *ppv) -{ - return IClassFactory_QueryInterface((IClassFactory *)&CompositeMonikerCF, riid, ppv); -} diff --git a/dlls/ole32/moniker.h b/dlls/ole32/moniker.h index 8af2d9e..8e0d187 100644 --- a/dlls/ole32/moniker.h +++ b/dlls/ole32/moniker.h @@ -33,7 +33,7 @@ DEFINE_OLEGUID( CLSID_PointerMoniker, 0x306, 0, 0 ); HRESULT WINAPI FileMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); HRESULT WINAPI ItemMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); HRESULT WINAPI AntiMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); -HRESULT CompositeMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI CompositeMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); HRESULT ClassMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT PointerMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; diff --git a/dlls/ole32/oleproxy.c b/dlls/ole32/oleproxy.c index 52249a2..ee3e120 100644 --- a/dlls/ole32/oleproxy.c +++ b/dlls/ole32/oleproxy.c @@ -106,6 +106,17 @@ static const IClassFactoryVtbl AntiMonikerCFVtbl = static IClassFactory AntiMonikerCF = { &AntiMonikerCFVtbl }; +static const IClassFactoryVtbl CompositeMonikerCFVtbl = +{ + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + CompositeMoniker_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory CompositeMonikerCF = { &CompositeMonikerCFVtbl }; + /*********************************************************************** * DllGetClassObject [OLE32.@] */ @@ -129,7 +140,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) if (IsEqualCLSID(rclsid, &CLSID_AntiMoniker)) return IClassFactory_QueryInterface(&AntiMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_CompositeMoniker)) - return CompositeMonikerCF_Create(iid, ppv); + return IClassFactory_QueryInterface(&CompositeMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_ClassMoniker)) return ClassMonikerCF_Create(iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_PointerMoniker))