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

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


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

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

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

---

 dlls/ole32/pointermoniker.c |   31 ++++++++++++++++++-------------
 1 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/dlls/ole32/pointermoniker.c b/dlls/ole32/pointermoniker.c
index 299b44e..d79afd2 100644
--- a/dlls/ole32/pointermoniker.c
+++ b/dlls/ole32/pointermoniker.c
@@ -40,17 +40,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
 /* PointerMoniker data structure */
 typedef struct PointerMonikerImpl{
 
-    const IMonikerVtbl*  lpvtbl;  /* VTable relative to the IMoniker interface.*/
+    IMoniker IMoniker_iface;
 
     LONG ref; /* reference counter for this object */
 
     IUnknown *pObject; /* custom marshaler */
 } PointerMonikerImpl;
 
+static inline PointerMonikerImpl *impl_from_IMoniker(IMoniker *iface)
+{
+return CONTAINING_RECORD(iface, PointerMonikerImpl, IMoniker_iface);
+}
+
 static HRESULT WINAPI
 PointerMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
     TRACE("(%p,%p,%p)\n",This,riid,ppvObject);
 
@@ -84,7 +89,7 @@ PointerMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
 static ULONG WINAPI
 PointerMonikerImpl_AddRef(IMoniker* iface)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
     TRACE("(%p)\n",This);
 
@@ -97,7 +102,7 @@ PointerMonikerImpl_AddRef(IMoniker* iface)
 static ULONG WINAPI
 PointerMonikerImpl_Release(IMoniker* iface)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
     ULONG ref;
 
     TRACE("(%p)\n",This);
@@ -194,7 +199,7 @@ static HRESULT WINAPI
 PointerMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
                              REFIID riid, VOID** ppvResult)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
     TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
 
@@ -211,7 +216,7 @@ static HRESULT WINAPI
 PointerMonikerImpl_BindToStorage(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
                               REFIID riid, VOID** ppvResult)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
     TRACE("(%p,%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,riid,ppvResult);
 
@@ -336,7 +341,7 @@ PointerMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoni
 static HRESULT WINAPI
 PointerMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
     DWORD mkSys;
 
     TRACE("(%p,%p)\n",iface,pmkOtherMoniker);
@@ -348,7 +353,7 @@ PointerMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
 
     if (mkSys==MKSYS_POINTERMONIKER)
     {
-        PointerMonikerImpl *pOtherMoniker = (PointerMonikerImpl *)pmkOtherMoniker;
+        PointerMonikerImpl *pOtherMoniker = impl_from_IMoniker(pmkOtherMoniker);
         return This->pObject == pOtherMoniker->pObject ? S_OK : S_FALSE;
     }
     else
@@ -360,7 +365,7 @@ PointerMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
  ******************************************************************************/
 static HRESULT WINAPI PointerMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
 
     if (pdwHash==NULL)
         return E_POINTER;
@@ -467,7 +472,7 @@ PointerMonikerImpl_ParseDisplayName(IMoniker* iface, IBindCtx* pbc,
                                  IMoniker* pmkToLeft, LPOLESTR pszDisplayName,
                                  ULONG* pchEaten, IMoniker** ppmkOut)
 {
-    PointerMonikerImpl *This = (PointerMonikerImpl *)iface;
+    PointerMonikerImpl *This = impl_from_IMoniker(iface);
     HRESULT hr;
     IParseDisplayName *pPDN;
 
@@ -543,8 +548,8 @@ static void PointerMonikerImpl_Construct(PointerMonikerImpl* This, IUnknown *pun
     TRACE("(%p)\n",This);
 
     /* Initialize the virtual function table. */
-    This->lpvtbl       = &VT_PointerMonikerImpl;
-    This->ref          = 1;
+    This->IMoniker_iface.lpVtbl = &VT_PointerMonikerImpl;
+    This->ref = 1;
     if (punk)
         IUnknown_AddRef(punk);
     This->pObject      = punk;
@@ -580,7 +585,7 @@ HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER *ppmk)
     }
 
     PointerMonikerImpl_Construct(This, punk);
-    *ppmk = (IMoniker *)&This->lpvtbl;
+    *ppmk = &This->IMoniker_iface;
     return S_OK;
 }
 




More information about the wine-cvs mailing list