Michael Stefaniuc : ole32: Use ifaces instead of vtbl pointers in FTMarshalImpl.
Alexandre Julliard
julliard at winehq.org
Wed Dec 15 11:29:59 CST 2010
Module: wine
Branch: master
Commit: ee56fbb947e3158ea7334335e363f45803e83f27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ee56fbb947e3158ea7334335e363f45803e83f27
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Wed Dec 15 00:35:52 2010 +0100
ole32: Use ifaces instead of vtbl pointers in FTMarshalImpl.
---
dlls/ole32/ftmarshal.c | 30 ++++++++++++++++--------------
1 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/dlls/ole32/ftmarshal.c b/dlls/ole32/ftmarshal.c
index d8f4bf6..9e58444 100644
--- a/dlls/ole32/ftmarshal.c
+++ b/dlls/ole32/ftmarshal.c
@@ -39,19 +39,21 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
typedef struct _FTMarshalImpl {
- const IUnknownVtbl *lpVtbl;
+ IUnknown IUnknown_iface;
LONG ref;
- const IMarshalVtbl *lpvtblFTM;
+ IMarshal IMarshal_iface;
IUnknown *pUnkOuter;
} FTMarshalImpl;
-#define _IFTMUnknown_(This) ((IUnknown*)&(This)->lpVtbl)
-#define _IFTMarshal_(This) (&(This)->lpvtblFTM)
+static inline FTMarshalImpl *impl_from_IUnknown(IUnknown *iface)
+{
+ return CONTAINING_RECORD(iface, FTMarshalImpl, IUnknown_iface);
+}
static inline FTMarshalImpl *impl_from_IMarshal( IMarshal *iface )
{
- return (FTMarshalImpl *)((char*)iface - FIELD_OFFSET(FTMarshalImpl, lpvtblFTM));
+ return CONTAINING_RECORD(iface, FTMarshalImpl, IMarshal_iface);
}
/* inner IUnknown to handle aggregation */
@@ -59,15 +61,15 @@ static HRESULT WINAPI
IiFTMUnknown_fnQueryInterface (IUnknown * iface, REFIID riid, LPVOID * ppv)
{
- FTMarshalImpl *This = (FTMarshalImpl *)iface;
+ FTMarshalImpl *This = impl_from_IUnknown(iface);
TRACE ("\n");
*ppv = NULL;
if (IsEqualIID (&IID_IUnknown, riid))
- *ppv = _IFTMUnknown_ (This);
+ *ppv = &This->IUnknown_iface;
else if (IsEqualIID (&IID_IMarshal, riid))
- *ppv = _IFTMarshal_ (This);
+ *ppv = &This->IMarshal_iface;
else {
FIXME ("No interface for %s.\n", debugstr_guid (riid));
return E_NOINTERFACE;
@@ -79,7 +81,7 @@ IiFTMUnknown_fnQueryInterface (IUnknown * iface, REFIID riid, LPVOID * ppv)
static ULONG WINAPI IiFTMUnknown_fnAddRef (IUnknown * iface)
{
- FTMarshalImpl *This = (FTMarshalImpl *)iface;
+ FTMarshalImpl *This = impl_from_IUnknown(iface);
TRACE ("\n");
return InterlockedIncrement (&This->ref);
@@ -88,7 +90,7 @@ static ULONG WINAPI IiFTMUnknown_fnAddRef (IUnknown * iface)
static ULONG WINAPI IiFTMUnknown_fnRelease (IUnknown * iface)
{
- FTMarshalImpl *This = (FTMarshalImpl *)iface;
+ FTMarshalImpl *This = impl_from_IUnknown(iface);
TRACE ("\n");
if (InterlockedDecrement (&This->ref))
@@ -340,12 +342,12 @@ HRESULT WINAPI CoCreateFreeThreadedMarshaler (LPUNKNOWN punkOuter, LPUNKNOWN * p
if (!ftm)
return E_OUTOFMEMORY;
- ftm->lpVtbl = &iunkvt;
- ftm->lpvtblFTM = &ftmvtbl;
+ ftm->IUnknown_iface.lpVtbl = &iunkvt;
+ ftm->IMarshal_iface.lpVtbl = &ftmvtbl;
ftm->ref = 1;
- ftm->pUnkOuter = punkOuter ? punkOuter : _IFTMUnknown_(ftm);
+ ftm->pUnkOuter = punkOuter ? punkOuter : &ftm->IUnknown_iface;
- *ppunkMarshal = _IFTMUnknown_ (ftm);
+ *ppunkMarshal = &ftm->IUnknown_iface;
return S_OK;
}
More information about the wine-cvs
mailing list