Michael Stefaniuc : ole32: Use an iface instead of a vtbl pointer in RemUnknown.

Alexandre Julliard julliard at winehq.org
Thu Dec 9 12:26:26 CST 2010


Module: wine
Branch: master
Commit: f27f7544fe1971ee6c7911db348824a405d9cdd6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f27f7544fe1971ee6c7911db348824a405d9cdd6

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Wed Dec  8 22:59:55 2010 +0100

ole32: Use an iface instead of a vtbl pointer in RemUnknown.

---

 dlls/ole32/stubmanager.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/dlls/ole32/stubmanager.c b/dlls/ole32/stubmanager.c
index f6b8bfa..f5a6ee8 100644
--- a/dlls/ole32/stubmanager.c
+++ b/dlls/ole32/stubmanager.c
@@ -578,12 +578,17 @@ BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid)
 
 typedef struct rem_unknown
 {
-    const IRemUnknownVtbl *lpVtbl;
+    IRemUnknown IRemUnknown_iface;
     LONG refs;
 } RemUnknown;
 
 static const IRemUnknownVtbl RemUnknown_Vtbl;
 
+static inline RemUnknown *impl_from_IRemUnknown(IRemUnknown *iface)
+{
+    return CONTAINING_RECORD(iface, RemUnknown, IRemUnknown_iface);
+}
+
 
 /* construct an IRemUnknown object with one outstanding reference */
 static HRESULT RemUnknown_Construct(IRemUnknown **ppRemUnknown)
@@ -592,10 +597,10 @@ static HRESULT RemUnknown_Construct(IRemUnknown **ppRemUnknown)
 
     if (!This) return E_OUTOFMEMORY;
 
-    This->lpVtbl = &RemUnknown_Vtbl;
+    This->IRemUnknown_iface.lpVtbl = &RemUnknown_Vtbl;
     This->refs = 1;
 
-    *ppRemUnknown = (IRemUnknown *)This;
+    *ppRemUnknown = &This->IRemUnknown_iface;
     return S_OK;
 }
 
@@ -620,7 +625,7 @@ static HRESULT WINAPI RemUnknown_QueryInterface(IRemUnknown *iface, REFIID riid,
 static ULONG WINAPI RemUnknown_AddRef(IRemUnknown *iface)
 {
     ULONG refs;
-    RemUnknown *This = (RemUnknown *)iface;
+    RemUnknown *This = impl_from_IRemUnknown(iface);
 
     refs = InterlockedIncrement(&This->refs);
 
@@ -631,7 +636,7 @@ static ULONG WINAPI RemUnknown_AddRef(IRemUnknown *iface)
 static ULONG WINAPI RemUnknown_Release(IRemUnknown *iface)
 {
     ULONG refs;
-    RemUnknown *This = (RemUnknown *)iface;
+    RemUnknown *This = impl_from_IRemUnknown(iface);
 
     refs = InterlockedDecrement(&This->refs);
     if (!refs)




More information about the wine-cvs mailing list