Module: wine Branch: master Commit: f4f05ff9aca515487165cb675e520d3796b84202 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f4f05ff9aca515487165cb675e...
Author: Michael Stefaniuc mstefani@redhat.de Date: Sun Dec 5 15:14:58 2010 +0100
oleaut32: Use an iface instead of a vtbl pointer in TMarshalDispatchChannel.
---
dlls/oleaut32/tmarshal.c | 27 ++++++++++++++++----------- 1 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c index 9f0145d..440319f 100644 --- a/dlls/oleaut32/tmarshal.c +++ b/dlls/oleaut32/tmarshal.c @@ -1526,13 +1526,18 @@ static HRESULT WINAPI ProxyIDispatch_Invoke(LPDISPATCH iface, DISPID dispIdMembe
typedef struct { - const IRpcChannelBufferVtbl *lpVtbl; + IRpcChannelBuffer IRpcChannelBuffer_iface; LONG refs; /* the IDispatch-derived interface we are handling */ - IID tmarshal_iid; + IID tmarshal_iid; IRpcChannelBuffer *pDelegateChannel; } TMarshalDispatchChannel;
+static inline TMarshalDispatchChannel *impl_from_IRpcChannelBuffer(IRpcChannelBuffer *iface) +{ + return CONTAINING_RECORD(iface, TMarshalDispatchChannel, IRpcChannelBuffer_iface); +} + static HRESULT WINAPI TMarshalDispatchChannel_QueryInterface(LPRPCCHANNELBUFFER iface, REFIID riid, LPVOID *ppv) { *ppv = NULL; @@ -1547,13 +1552,13 @@ static HRESULT WINAPI TMarshalDispatchChannel_QueryInterface(LPRPCCHANNELBUFFER
static ULONG WINAPI TMarshalDispatchChannel_AddRef(LPRPCCHANNELBUFFER iface) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); return InterlockedIncrement(&This->refs); }
static ULONG WINAPI TMarshalDispatchChannel_Release(LPRPCCHANNELBUFFER iface) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); ULONG ref;
ref = InterlockedDecrement(&This->refs); @@ -1567,7 +1572,7 @@ static ULONG WINAPI TMarshalDispatchChannel_Release(LPRPCCHANNELBUFFER iface)
static HRESULT WINAPI TMarshalDispatchChannel_GetBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE* olemsg, REFIID riid) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); TRACE("(%p, %s)\n", olemsg, debugstr_guid(riid)); /* Note: we are pretending to invoke a method on the interface identified * by tmarshal_iid so that we can re-use the IDispatch proxy/stub code @@ -1577,28 +1582,28 @@ static HRESULT WINAPI TMarshalDispatchChannel_GetBuffer(LPRPCCHANNELBUFFER iface
static HRESULT WINAPI TMarshalDispatchChannel_SendReceive(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE *olemsg, ULONG *pstatus) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); TRACE("(%p, %p)\n", olemsg, pstatus); return IRpcChannelBuffer_SendReceive(This->pDelegateChannel, olemsg, pstatus); }
static HRESULT WINAPI TMarshalDispatchChannel_FreeBuffer(LPRPCCHANNELBUFFER iface, RPCOLEMESSAGE* olemsg) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); TRACE("(%p)\n", olemsg); return IRpcChannelBuffer_FreeBuffer(This->pDelegateChannel, olemsg); }
static HRESULT WINAPI TMarshalDispatchChannel_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD* pdwDestContext, void** ppvDestContext) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); TRACE("(%p,%p)\n", pdwDestContext, ppvDestContext); return IRpcChannelBuffer_GetDestCtx(This->pDelegateChannel, pdwDestContext, ppvDestContext); }
static HRESULT WINAPI TMarshalDispatchChannel_IsConnected(LPRPCCHANNELBUFFER iface) { - TMarshalDispatchChannel *This = (TMarshalDispatchChannel *)iface; + TMarshalDispatchChannel *This = impl_from_IRpcChannelBuffer(iface); TRACE("()\n"); return IRpcChannelBuffer_IsConnected(This->pDelegateChannel); } @@ -1623,13 +1628,13 @@ static HRESULT TMarshalDispatchChannel_Create( if (!This) return E_OUTOFMEMORY;
- This->lpVtbl = &TMarshalDispatchChannelVtbl; + This->IRpcChannelBuffer_iface.lpVtbl = &TMarshalDispatchChannelVtbl; This->refs = 1; IRpcChannelBuffer_AddRef(pDelegateChannel); This->pDelegateChannel = pDelegateChannel; This->tmarshal_iid = *tmarshal_riid;
- *ppChannel = (IRpcChannelBuffer *)&This->lpVtbl; + *ppChannel = &This->IRpcChannelBuffer_iface; return S_OK; }