From: Jacek Caban Subject: [PATCH 6/7] ole32: Use generic class factory for pointer moniker. Message-Id: Date: Tue, 21 Feb 2017 13:20:09 +0100 Signed-off-by: Jacek Caban --- dlls/ole32/moniker.h | 2 +- dlls/ole32/oleproxy.c | 13 +++++++++++- dlls/ole32/pointermoniker.c | 48 ++------------------------------------------- 3 files changed, 15 insertions(+), 48 deletions(-) diff --git a/dlls/ole32/moniker.h b/dlls/ole32/moniker.h index 24011c0..7438fe0 100644 --- a/dlls/ole32/moniker.h +++ b/dlls/ole32/moniker.h @@ -35,7 +35,7 @@ HRESULT WINAPI ItemMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, 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 WINAPI ClassMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); -HRESULT PointerMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI PointerMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; /* This function decomposes a String path to a String Table containing all the elements ("\" or "subDirectory" or "Directory" or "FileName") of the path */ diff --git a/dlls/ole32/oleproxy.c b/dlls/ole32/oleproxy.c index 80f6935..faceced 100644 --- a/dlls/ole32/oleproxy.c +++ b/dlls/ole32/oleproxy.c @@ -128,6 +128,17 @@ static const IClassFactoryVtbl ClassMonikerCFVtbl = static IClassFactory ClassMonikerCF = { &ClassMonikerCFVtbl }; +static const IClassFactoryVtbl PointerMonikerCFVtbl = +{ + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + PointerMoniker_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory PointerMonikerCF = { &PointerMonikerCFVtbl }; + /*********************************************************************** * DllGetClassObject [OLE32.@] */ @@ -155,7 +166,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) if (IsEqualCLSID(rclsid, &CLSID_ClassMoniker)) return IClassFactory_QueryInterface(&ClassMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_PointerMoniker)) - return PointerMonikerCF_Create(iid, ppv); + return IClassFactory_QueryInterface(&PointerMonikerCF, iid, ppv); if (IsEqualGUID(rclsid, &CLSID_StdComponentCategoriesMgr)) return ComCatCF_Create(iid, ppv); diff --git a/dlls/ole32/pointermoniker.c b/dlls/ole32/pointermoniker.c index 3737600..a62ce3e 100644 --- a/dlls/ole32/pointermoniker.c +++ b/dlls/ole32/pointermoniker.c @@ -588,31 +588,8 @@ HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER *ppmk) return S_OK; } -static HRESULT WINAPI PointerMonikerCF_QueryInterface(LPCLASSFACTORY iface, - REFIID riid, LPVOID *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 PointerMonikerCF_AddRef(LPCLASSFACTORY iface) -{ - return 2; /* non-heap based object */ -} - -static ULONG WINAPI PointerMonikerCF_Release(LPCLASSFACTORY iface) -{ - return 1; /* non-heap based object */ -} - -static HRESULT WINAPI PointerMonikerCF_CreateInstance(LPCLASSFACTORY iface, - LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv) +HRESULT WINAPI PointerMoniker_CreateInstance(IClassFactory *iface, + IUnknown *pUnk, REFIID riid, void **ppv) { IMoniker *pMoniker; HRESULT hr; @@ -635,24 +612,3 @@ static HRESULT WINAPI PointerMonikerCF_CreateInstance(LPCLASSFACTORY iface, return hr; } - -static HRESULT WINAPI PointerMonikerCF_LockServer(LPCLASSFACTORY iface, BOOL fLock) -{ - FIXME("(%d), stub!\n",fLock); - return S_OK; -} - -static const IClassFactoryVtbl PointerMonikerCFVtbl = -{ - PointerMonikerCF_QueryInterface, - PointerMonikerCF_AddRef, - PointerMonikerCF_Release, - PointerMonikerCF_CreateInstance, - PointerMonikerCF_LockServer -}; -static const IClassFactoryVtbl *PointerMonikerCF = &PointerMonikerCFVtbl; - -HRESULT PointerMonikerCF_Create(REFIID riid, LPVOID *ppv) -{ - return IClassFactory_QueryInterface((IClassFactory *)&PointerMonikerCF, riid, ppv); -}