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,
|
HRESULT WINAPI FileMoniker_CreateInstance(IClassFactory *iface, IUnknown *pUnk, REFIID riid, void **ppv)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
FileMonikerImpl* newFileMoniker;
|
FileMonikerImpl* newFileMoniker;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
@ -1591,24 +1567,3 @@ static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface,
|
|||||||
|
|
||||||
return hr;
|
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_ClassMoniker, 0x31a, 0, 0 );
|
||||||
DEFINE_OLEGUID( CLSID_PointerMoniker, 0x306, 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 ItemMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN;
|
||||||
HRESULT AntiMonikerCF_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;
|
HRESULT CompositeMonikerCF_Create(REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN;
|
||||||
|
@ -39,6 +39,51 @@
|
|||||||
#include "moniker.h"
|
#include "moniker.h"
|
||||||
#include "comcat.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.@]
|
* 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)))
|
if (IsEqualIID(rclsid,&CLSID_StdGlobalInterfaceTable) && (IsEqualIID(iid,&IID_IClassFactory) || IsEqualIID(iid,&IID_IUnknown)))
|
||||||
return StdGlobalInterfaceTable_GetFactory(ppv);
|
return StdGlobalInterfaceTable_GetFactory(ppv);
|
||||||
if (IsEqualCLSID(rclsid, &CLSID_FileMoniker))
|
if (IsEqualCLSID(rclsid, &CLSID_FileMoniker))
|
||||||
return FileMonikerCF_Create(iid, ppv);
|
return IClassFactory_QueryInterface(&FileMonikerCF, iid, ppv);
|
||||||
if (IsEqualCLSID(rclsid, &CLSID_ItemMoniker))
|
if (IsEqualCLSID(rclsid, &CLSID_ItemMoniker))
|
||||||
return ItemMonikerCF_Create(iid, ppv);
|
return ItemMonikerCF_Create(iid, ppv);
|
||||||
if (IsEqualCLSID(rclsid, &CLSID_AntiMoniker))
|
if (IsEqualCLSID(rclsid, &CLSID_AntiMoniker))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user