Module: wine Branch: master Commit: cf7883f3960f20f1ed652d119269be9ad60c938f URL: http://source.winehq.org/git/wine.git/?a=commit;h=cf7883f3960f20f1ed652d1192...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 21 13:19:12 2017 +0100
ole32: Added generic class factory implementation and use it for file moniker.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/filemoniker.c | 47 +---------------------------------------------- dlls/ole32/moniker.h | 2 +- dlls/ole32/oleproxy.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/dlls/ole32/filemoniker.c b/dlls/ole32/filemoniker.c index 3cd7da4..271e5bb 100644 --- a/dlls/ole32/filemoniker.c +++ b/dlls/ole32/filemoniker.c @@ -1541,31 +1541,7 @@ HRESULT FileMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName, }
-static HRESULT WINAPI FileMonikerCF_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 FileMonikerCF_AddRef(LPCLASSFACTORY iface) -{ - return 2; /* non-heap based object */ -} - -static ULONG WINAPI FileMonikerCF_Release(LPCLASSFACTORY iface) -{ - return 1; /* non-heap based object */ -} - -static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface, - LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv) +HRESULT WINAPI FileMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv) { FileMonikerImpl* newFileMoniker; HRESULT hr; @@ -1591,24 +1567,3 @@ static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface,
return hr; } - -static HRESULT WINAPI FileMonikerCF_LockServer(LPCLASSFACTORY iface, BOOL fLock) -{ - FIXME("(%d), stub!\n",fLock); - return S_OK; -} - -static const IClassFactoryVtbl FileMonikerCFVtbl = -{ - FileMonikerCF_QueryInterface, - FileMonikerCF_AddRef, - FileMonikerCF_Release, - FileMonikerCF_CreateInstance, - FileMonikerCF_LockServer -}; -static const IClassFactoryVtbl *FileMonikerCF = &FileMonikerCFVtbl; - -HRESULT FileMonikerCF_Create(REFIID riid, LPVOID *ppv) -{ - return IClassFactory_QueryInterface((IClassFactory *)&FileMonikerCF, riid, ppv); -} diff --git a/dlls/ole32/moniker.h b/dlls/ole32/moniker.h index c23e9d3..2b08384 100644 --- a/dlls/ole32/moniker.h +++ b/dlls/ole32/moniker.h @@ -30,7 +30,7 @@ DEFINE_OLEGUID( CLSID_CompositeMoniker, 0x309, 0, 0 ); DEFINE_OLEGUID( CLSID_ClassMoniker, 0x31a, 0, 0 ); DEFINE_OLEGUID( CLSID_PointerMoniker, 0x306, 0, 0 );
-HRESULT FileMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI FileMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv); HRESULT ItemMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT AntiMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT CompositeMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; diff --git a/dlls/ole32/oleproxy.c b/dlls/ole32/oleproxy.c index 8351f27..ba0703d 100644 --- a/dlls/ole32/oleproxy.c +++ b/dlls/ole32/oleproxy.c @@ -39,6 +39,51 @@ #include "moniker.h" #include "comcat.h"
+#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(ole); + +static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) +{ + TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv); + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IClassFactory)) + { + *ppv = iface; + return S_OK; + } + + *ppv = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) +{ + return 2; +} + +static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) +{ + return 1; +} + +static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock) +{ + TRACE("(%x)\n", fLock); + return S_OK; +} + +static const IClassFactoryVtbl FileMonikerCFVtbl = +{ + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + FileMoniker_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory FileMonikerCF = { &FileMonikerCFVtbl }; + /*********************************************************************** * DllGetClassObject [OLE32.@] */ @@ -56,7 +101,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) if (IsEqualIID(rclsid,&CLSID_StdGlobalInterfaceTable) && (IsEqualIID(iid,&IID_IClassFactory) || IsEqualIID(iid,&IID_IUnknown))) return StdGlobalInterfaceTable_GetFactory(ppv); if (IsEqualCLSID(rclsid, &CLSID_FileMoniker)) - return FileMonikerCF_Create(iid, ppv); + return IClassFactory_QueryInterface(&FileMonikerCF, iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_ItemMoniker)) return ItemMonikerCF_Create(iid, ppv); if (IsEqualCLSID(rclsid, &CLSID_AntiMoniker))