diff --git a/dlls/ole32/filemoniker.c b/dlls/ole32/filemoniker.c index 3cd7da49ea4..271e5bb8a8b 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 c23e9d3b966..2b08384c8f9 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 8351f277704..ba0703d002d 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))