ole32: Use ifaces instead of vtbl pointers in Context.

Michael Stefaniuc mstefani at redhat.de
Wed Dec 8 15:59:44 CST 2010


---
 dlls/ole32/compobj.c |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index fae4c8f..ad338bd 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -3742,26 +3742,26 @@ HRESULT WINAPI CoRegisterChannelHook(REFGUID guidExtension, IChannelHook *pChann
 
 typedef struct Context
 {
-    const IComThreadingInfoVtbl *lpVtbl;
-    const IContextCallbackVtbl  *lpCallbackVtbl;
-    const IObjContextVtbl  *lpContextVtbl;
+    IComThreadingInfo IComThreadingInfo_iface;
+    IContextCallback IContextCallback_iface;
+    IObjContext IObjContext_iface;
     LONG refs;
     APTTYPE apttype;
 } Context;
 
 static inline Context *impl_from_IComThreadingInfo( IComThreadingInfo *iface )
 {
-        return (Context *)((char*)iface - FIELD_OFFSET(Context, lpVtbl));
+        return CONTAINING_RECORD(iface, Context, IComThreadingInfo_iface);
 }
 
 static inline Context *impl_from_IContextCallback( IContextCallback *iface )
 {
-        return (Context *)((char*)iface - FIELD_OFFSET(Context, lpCallbackVtbl));
+        return CONTAINING_RECORD(iface, Context, IContextCallback_iface);
 }
 
 static inline Context *impl_from_IObjContext( IObjContext *iface )
 {
-        return (Context *)((char*)iface - FIELD_OFFSET(Context, lpContextVtbl));
+        return CONTAINING_RECORD(iface, Context, IObjContext_iface);
 }
 
 static HRESULT Context_QueryInterface(Context *iface, REFIID riid, LPVOID *ppv)
@@ -3771,15 +3771,15 @@ static HRESULT Context_QueryInterface(Context *iface, REFIID riid, LPVOID *ppv)
     if (IsEqualIID(riid, &IID_IComThreadingInfo) ||
         IsEqualIID(riid, &IID_IUnknown))
     {
-        *ppv = &iface->lpVtbl;
+        *ppv = &iface->IComThreadingInfo_iface;
     }
     else if (IsEqualIID(riid, &IID_IContextCallback))
     {
-        *ppv = &iface->lpCallbackVtbl;
+        *ppv = &iface->IContextCallback_iface;
     }
     else if (IsEqualIID(riid, &IID_IObjContext))
     {
-        *ppv = &iface->lpContextVtbl;
+        *ppv = &iface->IObjContext_iface;
     }
 
     if (*ppv)
@@ -4056,9 +4056,9 @@ HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv)
     if (!context)
         return E_OUTOFMEMORY;
 
-    context->lpVtbl = &Context_Threading_Vtbl;
-    context->lpCallbackVtbl = &Context_Callback_Vtbl;
-    context->lpContextVtbl = &Context_Object_Vtbl;
+    context->IComThreadingInfo_iface.lpVtbl = &Context_Threading_Vtbl;
+    context->IContextCallback_iface.lpVtbl = &Context_Callback_Vtbl;
+    context->IObjContext_iface.lpVtbl = &Context_Object_Vtbl;
     context->refs = 1;
     if (apt->multi_threaded)
         context->apttype = APTTYPE_MTA;
@@ -4067,8 +4067,8 @@ HRESULT WINAPI CoGetObjectContext(REFIID riid, void **ppv)
     else
         context->apttype = APTTYPE_STA;
 
-    hr = IUnknown_QueryInterface((IUnknown *)&context->lpVtbl, riid, ppv);
-    IUnknown_Release((IUnknown *)&context->lpVtbl);
+    hr = IUnknown_QueryInterface((IUnknown *)&context->IComThreadingInfo_iface, riid, ppv);
+    IUnknown_Release((IUnknown *)&context->IComThreadingInfo_iface);
 
     return hr;
 }
-- 
1.7.3.2



More information about the wine-patches mailing list