From: Jacek Caban Subject: [PATCH 5/7] ole32: Use generic class factory for class moniker. Message-Id: <4a6af1a9-25cf-e8be-a8cf-dc14ecec1165@codeweavers.com> Date: Tue, 21 Feb 2017 13:19:47 +0100 Signed-off-by: Jacek Caban --- dlls/ole32/classmoniker.c | 48 ++--------------------------------------------- dlls/ole32/moniker.h | 2 +- dlls/ole32/oleproxy.c | 13 ++++++++++++- 3 files changed, 15 insertions(+), 48 deletions(-) diff --git a/dlls/ole32/classmoniker.c b/dlls/ole32/classmoniker.c index 22c76bf..ebad794 100644 --- a/dlls/ole32/classmoniker.c +++ b/dlls/ole32/classmoniker.c @@ -804,30 +804,8 @@ HRESULT ClassMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LP return hr; } -static HRESULT WINAPI ClassMonikerCF_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 ClassMonikerCF_AddRef(LPCLASSFACTORY iface) -{ - return 2; /* non-heap based object */ -} - -static ULONG WINAPI ClassMonikerCF_Release(LPCLASSFACTORY iface) -{ - return 1; /* non-heap based object */ -} - -static HRESULT WINAPI ClassMonikerCF_CreateInstance(LPCLASSFACTORY iface, - LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv) +HRESULT WINAPI ClassMoniker_CreateInstance(IClassFactory *iface, + IUnknown *pUnk, REFIID riid, void **ppv) { HRESULT hr; IMoniker *pmk; @@ -847,25 +825,3 @@ static HRESULT WINAPI ClassMonikerCF_CreateInstance(LPCLASSFACTORY iface, return hr; } - -static HRESULT WINAPI ClassMonikerCF_LockServer(LPCLASSFACTORY iface, BOOL fLock) -{ - FIXME("(%d), stub!\n",fLock); - return S_OK; -} - -static const IClassFactoryVtbl ClassMonikerCFVtbl = -{ - ClassMonikerCF_QueryInterface, - ClassMonikerCF_AddRef, - ClassMonikerCF_Release, - ClassMonikerCF_CreateInstance, - ClassMonikerCF_LockServer -}; - -static IClassFactory ClassMonikerCF = { &ClassMonikerCFVtbl }; - -HRESULT ClassMonikerCF_Create(REFIID riid, LPVOID *ppv) -{ - return IClassFactory_QueryInterface(&ClassMonikerCF, riid, ppv); -} diff --git a/dlls/ole32/moniker.h b/dlls/ole32/moniker.h index 8e0d187..24011c0 100644 --- a/dlls/ole32/moniker.h +++ b/dlls/ole32/moniker.h @@ -34,7 +34,7 @@ HRESULT WINAPI FileMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, 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 WINAPI CompositeMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); -HRESULT ClassMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI ClassMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); 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 ee3e120..80f6935 100644 --- a/dlls/ole32/oleproxy.c +++ b/dlls/ole32/oleproxy.c @@ -117,6 +117,17 @@ static const IClassFactoryVtbl CompositeMonikerCFVtbl = static IClassFactory CompositeMonikerCF = { &CompositeMonikerCFVtbl }; +static const IClassFactoryVtbl ClassMonikerCFVtbl = +{ + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + ClassMoniker_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory ClassMonikerCF = { &ClassMonikerCFVtbl }; + /*********************************************************************** * DllGetClassObject [OLE32.@] */ @@ -142,7 +153,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) if (IsEqualCLSID(rclsid, &CLSID_CompositeMoniker)) return IClassFactory_QueryInterface(&CompositeMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_ClassMoniker)) - return ClassMonikerCF_Create(iid, ppv); + return IClassFactory_QueryInterface(&ClassMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_PointerMoniker)) return PointerMonikerCF_Create(iid, ppv); if (IsEqualGUID(rclsid, &CLSID_StdComponentCategoriesMgr))