ole32: Added ISynchronizeHandle implementation.
This commit is contained in:
parent
df4f027238
commit
c6793a2e27
|
@ -465,6 +465,7 @@ static void COM_RevokeAllClasses(const struct apartment *apt)
|
||||||
|
|
||||||
typedef struct ManualResetEvent {
|
typedef struct ManualResetEvent {
|
||||||
ISynchronize ISynchronize_iface;
|
ISynchronize ISynchronize_iface;
|
||||||
|
ISynchronizeHandle ISynchronizeHandle_iface;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
HANDLE event;
|
HANDLE event;
|
||||||
} MREImpl;
|
} MREImpl;
|
||||||
|
@ -477,22 +478,21 @@ static inline MREImpl *impl_from_ISynchronize(ISynchronize *iface)
|
||||||
static HRESULT WINAPI ISynchronize_fnQueryInterface(ISynchronize *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI ISynchronize_fnQueryInterface(ISynchronize *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
MREImpl *This = impl_from_ISynchronize(iface);
|
MREImpl *This = impl_from_ISynchronize(iface);
|
||||||
|
|
||||||
TRACE("%p (%s, %p)\n", This, debugstr_guid(riid), ppv);
|
TRACE("%p (%s, %p)\n", This, debugstr_guid(riid), ppv);
|
||||||
|
|
||||||
*ppv = NULL;
|
if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_ISynchronize)) {
|
||||||
if(IsEqualGUID(riid, &IID_IUnknown) ||
|
*ppv = &This->ISynchronize_iface;
|
||||||
IsEqualGUID(riid, &IID_ISynchronize))
|
}else if(IsEqualGUID(riid, &IID_ISynchronizeHandle)) {
|
||||||
*ppv = This;
|
*ppv = &This->ISynchronizeHandle_iface;
|
||||||
else
|
}else {
|
||||||
ERR("Unknown interface %s requested.\n", debugstr_guid(riid));
|
ERR("Unknown interface %s requested.\n", debugstr_guid(riid));
|
||||||
|
*ppv = NULL;
|
||||||
if(*ppv)
|
return E_NOINTERFACE;
|
||||||
{
|
|
||||||
IUnknown_AddRef((IUnknown*)*ppv);
|
|
||||||
return S_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return E_NOINTERFACE;
|
IUnknown_AddRef((IUnknown*)*ppv);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ISynchronize_fnAddRef(ISynchronize *iface)
|
static ULONG WINAPI ISynchronize_fnAddRef(ISynchronize *iface)
|
||||||
|
@ -552,6 +552,44 @@ static ISynchronizeVtbl vt_ISynchronize = {
|
||||||
ISynchronize_fnReset
|
ISynchronize_fnReset
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline MREImpl *impl_from_ISynchronizeHandle(ISynchronizeHandle *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, MREImpl, ISynchronizeHandle_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI SynchronizeHandle_QueryInterface(ISynchronizeHandle *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
MREImpl *This = impl_from_ISynchronizeHandle(iface);
|
||||||
|
return ISynchronize_QueryInterface(&This->ISynchronize_iface, riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI SynchronizeHandle_AddRef(ISynchronizeHandle *iface)
|
||||||
|
{
|
||||||
|
MREImpl *This = impl_from_ISynchronizeHandle(iface);
|
||||||
|
return ISynchronize_AddRef(&This->ISynchronize_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI SynchronizeHandle_Release(ISynchronizeHandle *iface)
|
||||||
|
{
|
||||||
|
MREImpl *This = impl_from_ISynchronizeHandle(iface);
|
||||||
|
return ISynchronize_Release(&This->ISynchronize_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI SynchronizeHandle_GetHandle(ISynchronizeHandle *iface, HANDLE *ph)
|
||||||
|
{
|
||||||
|
MREImpl *This = impl_from_ISynchronizeHandle(iface);
|
||||||
|
|
||||||
|
*ph = This->event;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ISynchronizeHandleVtbl SynchronizeHandleVtbl = {
|
||||||
|
SynchronizeHandle_QueryInterface,
|
||||||
|
SynchronizeHandle_AddRef,
|
||||||
|
SynchronizeHandle_Release,
|
||||||
|
SynchronizeHandle_GetHandle
|
||||||
|
};
|
||||||
|
|
||||||
static HRESULT ManualResetEvent_Construct(IUnknown *punkouter, REFIID iid, void **ppv)
|
static HRESULT ManualResetEvent_Construct(IUnknown *punkouter, REFIID iid, void **ppv)
|
||||||
{
|
{
|
||||||
MREImpl *This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MREImpl));
|
MREImpl *This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MREImpl));
|
||||||
|
@ -562,6 +600,7 @@ static HRESULT ManualResetEvent_Construct(IUnknown *punkouter, REFIID iid, void
|
||||||
|
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->ISynchronize_iface.lpVtbl = &vt_ISynchronize;
|
This->ISynchronize_iface.lpVtbl = &vt_ISynchronize;
|
||||||
|
This->ISynchronizeHandle_iface.lpVtbl = &SynchronizeHandleVtbl;
|
||||||
This->event = CreateEventW(NULL, TRUE, FALSE, NULL);
|
This->event = CreateEventW(NULL, TRUE, FALSE, NULL);
|
||||||
|
|
||||||
hr = ISynchronize_QueryInterface(&This->ISynchronize_iface, iid, ppv);
|
hr = ISynchronize_QueryInterface(&This->ISynchronize_iface, iid, ppv);
|
||||||
|
|
Loading…
Reference in New Issue