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>
This commit is contained in:
parent
fefd15118f
commit
cf7883f396
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user