Hello Ričardas!

Ričardas Barkauskas wrote:
> My first try for COM cleanup. Please donėt be too harsh :)
> If this is too large for one patch, please suggest how to split it.
> 
> This is not automatic clean up so I don't really expect it to be good on
> first try.
Heh! I have attached the raw diff generated by my coccinelle script.
Looking at the interdiff between the two patches it looks like you
caught everything. And the BADBADBAD() (*) from the generated patch are
replaced with unsafe_impl_from_IDirectDrawSurface3(), very good.

If you want to do more COM cleanup I can give you the raw generated
patches to save you some time.

bye
        michael

P.S.: (*) My script validates that impl_from_IFace() is called only from
methods of that IFace. All other impl_from_IFace() calls are replaced
with BADBADBAD().
diff -u -p a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
--- a/dlls/ddraw/ddraw_private.h 2011-05-24 21:52:30.191863832 +0200
+++ b/dlls/ddraw/ddraw_private.h 2011-05-24 22:04:40.459493227 +0200
@@ -279,7 +279,7 @@ struct IDirect3DDeviceImpl
 {
     /* IUnknown */
     const IDirect3DDevice7Vtbl *lpVtbl;
-    const IDirect3DDevice3Vtbl *IDirect3DDevice3_vtbl;
+    IDirect3DDevice3 IDirect3DDevice3_iface;
     const IDirect3DDevice2Vtbl *IDirect3DDevice2_vtbl;
     const IDirect3DDeviceVtbl *IDirect3DDevice_vtbl;
     LONG                    ref;
@@ -336,9 +336,9 @@ static inline IDirect3DDeviceImpl *devic
     return (IDirect3DDeviceImpl *)((char*)iface - FIELD_OFFSET(IDirect3DDeviceImpl, IDirect3DDevice2_vtbl));
 }
 
-static inline IDirect3DDeviceImpl *device_from_device3(IDirect3DDevice3 *iface)
+static inline IDirect3DDeviceImpl *impl_from_IDirect3DDevice3(IDirect3DDevice3 *iface)
 {
-    return (IDirect3DDeviceImpl *)((char*)iface - FIELD_OFFSET(IDirect3DDeviceImpl, IDirect3DDevice3_vtbl));
+    return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice3_iface);
 }
 
 /* Structures */
diff -u -p a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
--- a/dlls/ddraw/ddraw.c 2011-05-24 20:51:49.671810005 +0200
+++ b/dlls/ddraw/ddraw.c 2011-05-24 22:04:40.569494647 +0200
@@ -4763,7 +4763,7 @@ static HRESULT WINAPI d3d3_CreateDevice(
 
     hr = d3d7_CreateDevice(&This->IDirect3D7_iface, riid, (IDirectDrawSurface7 *)surface,
             (IDirect3DDevice7 **)device);
-    if (*device) *device = (IDirect3DDevice3 *)&((IDirect3DDeviceImpl *)*device)->IDirect3DDevice3_vtbl;
+    if (*device) *device = (IDirect3DDevice3 *)&(BADBADBAD(*device))->IDirect3DDevice3_vtbl;
 
     return hr;
 }
diff -u -p a/dlls/ddraw/device.c b/dlls/ddraw/device.c
--- a/dlls/ddraw/device.c 2011-05-24 20:51:58.111927504 +0200
+++ b/dlls/ddraw/device.c 2011-05-24 22:04:42.142848293 +0200
@@ -171,7 +171,7 @@ IDirect3DDeviceImpl_7_QueryInterface(IDi
         TRACE("(%p) Returning IDirect3DDevice2 interface at %p\n", This, *obj);
     }
     else if ( IsEqualGUID( &IID_IDirect3DDevice3  , refiid ) ) {
-        *obj = &This->IDirect3DDevice3_vtbl;
+        *obj = &This->IDirect3DDevice3_iface;
         TRACE("(%p) Returning IDirect3DDevice3 interface at %p\n", This, *obj);
     }
     else if ( IsEqualGUID( &IID_IDirect3DDevice7  , refiid ) ) {
@@ -196,7 +196,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), obj);
 
-    return IDirect3DDevice7_QueryInterface((IDirect3DDevice7 *)device_from_device3(iface), riid, obj);
+    return IDirect3DDevice7_QueryInterface((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), riid, obj);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_2_QueryInterface(IDirect3DDevice2 *iface, REFIID riid,
@@ -242,7 +242,7 @@ static ULONG WINAPI IDirect3DDeviceImpl_
 {
     TRACE("iface %p.\n", iface);
 
-    return IDirect3DDevice7_AddRef((IDirect3DDevice7 *)device_from_device3(iface));
+    return IDirect3DDevice7_AddRef((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface));
 }
 
 static ULONG WINAPI IDirect3DDeviceImpl_2_AddRef(IDirect3DDevice2 *iface)
@@ -378,7 +378,7 @@ static ULONG WINAPI IDirect3DDeviceImpl_
 {
     TRACE("iface %p.\n", iface);
 
-    return IDirect3DDevice7_Release((IDirect3DDevice7 *)device_from_device3(iface));
+    return IDirect3DDevice7_Release((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface));
 }
 
 static ULONG WINAPI IDirect3DDeviceImpl_2_Release(IDirect3DDevice2 *iface)
@@ -497,7 +497,7 @@ IDirect3DDeviceImpl_3_GetCaps(IDirect3DD
                               D3DDEVICEDESC *HWDesc,
                               D3DDEVICEDESC *HelDesc)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     D3DDEVICEDESC7 newDesc;
     HRESULT hr;
 
@@ -515,7 +515,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     IDirect3DDeviceImpl *This = device_from_device2(iface);
     TRACE("iface %p, hw_desc %p, hel_desc %p.\n", iface, D3DHWDevDesc, D3DHELDevDesc);
-    return IDirect3DDevice3_GetCaps((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, D3DHWDevDesc, D3DHELDevDesc);
+    return IDirect3DDevice3_GetCaps(&This->IDirect3DDevice3_iface, D3DHWDevDesc, D3DHELDevDesc);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_GetCaps(IDirect3DDevice *iface,
@@ -523,7 +523,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     IDirect3DDeviceImpl *This = device_from_device1(iface);
     TRACE("iface %p, hw_desc %p, hel_desc %p.\n", iface, D3DHWDevDesc, D3DHELDevDesc);
-    return IDirect3DDevice3_GetCaps((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, D3DHWDevDesc, D3DHELDevDesc);
+    return IDirect3DDevice3_GetCaps(&This->IDirect3DDevice3_iface, D3DHWDevDesc, D3DHELDevDesc);
 }
 
 /*****************************************************************************
@@ -621,7 +621,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, stats %p.\n", iface, Stats);
 
-    return IDirect3DDevice3_GetStats((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, Stats);
+    return IDirect3DDevice3_GetStats(&This->IDirect3DDevice3_iface, Stats);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_GetStats(IDirect3DDevice *iface, D3DSTATS *Stats)
@@ -630,7 +630,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, stats %p.\n", iface, Stats);
 
-    return IDirect3DDevice3_GetStats((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, Stats);
+    return IDirect3DDevice3_GetStats(&This->IDirect3DDevice3_iface, Stats);
 }
 
 /*****************************************************************************
@@ -752,7 +752,7 @@ static HRESULT WINAPI
 IDirect3DDeviceImpl_3_AddViewport(IDirect3DDevice3 *iface,
                                   IDirect3DViewport3 *Viewport)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport;
 
     TRACE("iface %p, viewport %p.\n", iface, Viewport);
@@ -778,7 +778,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_AddViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface,
@@ -789,7 +789,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
-    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_AddViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp);
 }
 
 /*****************************************************************************
@@ -810,7 +810,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
  *****************************************************************************/
 static HRESULT WINAPI IDirect3DDeviceImpl_3_DeleteViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *viewport)
 {
-    IDirect3DDeviceImpl *device = device_from_device3(iface);
+    IDirect3DDeviceImpl *device = impl_from_IDirect3DDevice3(iface);
     IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)viewport;
 
     TRACE("iface %p, viewport %p.\n", iface, viewport);
@@ -839,7 +839,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_DeleteViewport(IDirect3DDevice *iface,
@@ -850,7 +850,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
-    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp);
 }
 
 /*****************************************************************************
@@ -877,7 +877,7 @@ IDirect3DDeviceImpl_3_NextViewport(IDire
                                    IDirect3DViewport3 **lplpDirect3DViewport3,
                                    DWORD Flags)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport3;
     struct list *entry;
 
@@ -933,7 +933,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, viewport %p, next %p, flags %#x.\n",
             iface, Viewport2, lplpDirect3DViewport2, Flags);
 
-    hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    hr = IDirect3DDevice3_NextViewport(&This->IDirect3DDevice3_iface,
             (IDirect3DViewport3 *)vp, &res, Flags);
     *lplpDirect3DViewport2 = (IDirect3DViewport2 *)res;
     return hr;
@@ -950,7 +950,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, viewport %p, next %p, flags %#x.\n",
             iface, Viewport, lplpDirect3DViewport, Flags);
 
-    hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    hr = IDirect3DDevice3_NextViewport(&This->IDirect3DDevice3_iface,
             (IDirect3DViewport3 *)vp, &res, Flags);
     *lplpDirect3DViewport = (IDirect3DViewport *)res;
     return hr;
@@ -1169,7 +1169,7 @@ IDirect3DDeviceImpl_7_EnumTextureFormats
 static HRESULT WINAPI IDirect3DDeviceImpl_3_EnumTextureFormats(IDirect3DDevice3 *iface,
         LPD3DENUMPIXELFORMATSCALLBACK Callback, void *Arg)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, callback %p, context %p.\n", iface, Callback, Arg);
 
@@ -1519,7 +1519,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     TRACE("iface %p.\n", iface);
 
-    return IDirect3DDevice7_BeginScene((IDirect3DDevice7 *)device_from_device3(iface));
+    return IDirect3DDevice7_BeginScene((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface));
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_2_BeginScene(IDirect3DDevice2 *iface)
@@ -1588,7 +1588,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH 
 {
     TRACE("iface %p.\n", iface);
 
-    return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)device_from_device3(iface));
+    return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface));
 }
 
 static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDeviceImpl_2_EndScene(IDirect3DDevice2 *iface)
@@ -1640,7 +1640,7 @@ IDirect3DDeviceImpl_7_GetDirect3D(IDirec
 static HRESULT WINAPI IDirect3DDeviceImpl_3_GetDirect3D(IDirect3DDevice3 *iface,
         IDirect3D3 **Direct3D3)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, d3d %p.\n", iface, Direct3D3);
 
@@ -1705,7 +1705,7 @@ static HRESULT WINAPI
 IDirect3DDeviceImpl_3_SetCurrentViewport(IDirect3DDevice3 *iface,
                                          IDirect3DViewport3 *Direct3DViewport3)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport3;
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3);
@@ -1752,7 +1752,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    return IDirect3DDevice3_SetCurrentViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    return IDirect3DDevice3_SetCurrentViewport(&This->IDirect3DDevice3_iface,
             (IDirect3DViewport3 *)vp);
 }
 
@@ -1775,7 +1775,7 @@ static HRESULT WINAPI
 IDirect3DDeviceImpl_3_GetCurrentViewport(IDirect3DDevice3 *iface,
                                          IDirect3DViewport3 **Direct3DViewport3)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3);
 
@@ -1802,7 +1802,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    hr = IDirect3DDevice3_GetCurrentViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    hr = IDirect3DDevice3_GetCurrentViewport(&This->IDirect3DDevice3_iface,
             (IDirect3DViewport3 **)Direct3DViewport2);
     if(hr != D3D_OK) return hr;
     return D3D_OK;
@@ -1888,7 +1888,7 @@ IDirect3DDeviceImpl_7_SetRenderTarget_FP
 static HRESULT WINAPI IDirect3DDeviceImpl_3_SetRenderTarget(IDirect3DDevice3 *iface,
         IDirectDrawSurface4 *NewRenderTarget, DWORD Flags)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     IDirectDrawSurfaceImpl *Target = (IDirectDrawSurfaceImpl *)NewRenderTarget;
 
     TRACE("iface %p, target %p, flags %#x.\n", iface, NewRenderTarget, Flags);
@@ -1946,7 +1946,7 @@ IDirect3DDeviceImpl_7_GetRenderTarget(ID
 static HRESULT WINAPI IDirect3DDeviceImpl_3_GetRenderTarget(IDirect3DDevice3 *iface,
         IDirectDrawSurface4 **RenderTarget)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     HRESULT hr;
 
     TRACE("iface %p, target %p.\n", iface, RenderTarget);
@@ -1995,7 +1995,7 @@ IDirect3DDeviceImpl_3_Begin(IDirect3DDev
                             DWORD VertexTypeDesc,
                             DWORD Flags)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, primitive_type %#x, FVF %#x, flags %#x.\n",
             iface, PrimitiveType, VertexTypeDesc, Flags);
@@ -2030,7 +2030,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
             return DDERR_INVALIDPARAMS;  /* Should never happen */
     };
 
-    return IDirect3DDevice3_Begin((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, d3dpt, FVF, dwFlags);
+    return IDirect3DDevice3_Begin(&This->IDirect3DDevice3_iface, d3dpt, FVF, dwFlags);
 }
 
 /*****************************************************************************
@@ -2087,7 +2087,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
             return DDERR_INVALIDPARAMS;  /* Should never happen */
     };
 
-    return IDirect3DDevice3_BeginIndexed((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    return IDirect3DDevice3_BeginIndexed(&This->IDirect3DDevice3_iface,
             d3dptPrimitiveType, FVF, lpvVertices, dwNumVertices, dwFlags);
 }
 
@@ -2112,7 +2112,7 @@ static HRESULT WINAPI
 IDirect3DDeviceImpl_3_Vertex(IDirect3DDevice3 *iface,
                              void *Vertex)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, vertex %p.\n", iface, Vertex);
 
@@ -2145,7 +2145,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, vertex %p.\n", iface, lpVertexType);
 
-    return IDirect3DDevice3_Vertex((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, lpVertexType);
+    return IDirect3DDevice3_Vertex(&This->IDirect3DDevice3_iface, lpVertexType);
 }
 
 /*****************************************************************************
@@ -2176,7 +2176,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, index %#x.\n", iface, wVertexIndex);
 
-    return IDirect3DDevice3_Index((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, wVertexIndex);
+    return IDirect3DDevice3_Index(&This->IDirect3DDevice3_iface, wVertexIndex);
 }
 
 /*****************************************************************************
@@ -2201,7 +2201,7 @@ static HRESULT WINAPI
 IDirect3DDeviceImpl_3_End(IDirect3DDevice3 *iface,
                           DWORD Flags)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, flags %#x.\n", iface, Flags);
 
@@ -2215,7 +2215,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, flags %#x.\n", iface, dwFlags);
 
-    return IDirect3DDevice3_End((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, dwFlags);
+    return IDirect3DDevice3_End(&This->IDirect3DDevice3_iface, dwFlags);
 }
 
 /*****************************************************************************
@@ -2413,7 +2413,7 @@ IDirect3DDeviceImpl_3_GetRenderState(IDi
                                      D3DRENDERSTATETYPE dwRenderStateType,
                                      DWORD *lpdwRenderState)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     HRESULT hr;
 
     TRACE("iface %p, state %#x, value %p.\n", iface, dwRenderStateType, lpdwRenderState);
@@ -2530,7 +2530,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, state %#x, value %p.\n", iface, dwRenderStateType, lpdwRenderState);
 
-    return IDirect3DDevice3_GetRenderState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
+    return IDirect3DDevice3_GetRenderState(&This->IDirect3DDevice3_iface,
             dwRenderStateType, lpdwRenderState);
 }
 
@@ -2753,7 +2753,7 @@ IDirect3DDeviceImpl_3_SetRenderState(IDi
     unless some broken game will be found that cares. */
 
     HRESULT hr;
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, state %#x, value %#x.\n", iface, RenderStateType, Value);
 
@@ -2911,7 +2911,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, state %#x, value %#x.\n", iface, RenderStateType, Value);
 
-    return IDirect3DDevice3_SetRenderState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, RenderStateType, Value);
+    return IDirect3DDevice3_SetRenderState(&This->IDirect3DDevice3_iface, RenderStateType, Value);
 }
 
 /*****************************************************************************
@@ -2937,7 +2937,7 @@ IDirect3DDeviceImpl_3_SetLightState(IDir
                                     D3DLIGHTSTATETYPE LightStateType,
                                     DWORD Value)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     HRESULT hr;
 
     TRACE("iface %p, state %#x, value %#x.\n", iface, LightStateType, Value);
@@ -3026,7 +3026,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, state %#x, value %#x.\n", iface, LightStateType, Value);
 
-    return IDirect3DDevice3_SetLightState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, LightStateType, Value);
+    return IDirect3DDevice3_SetLightState(&This->IDirect3DDevice3_iface, LightStateType, Value);
 }
 
 /*****************************************************************************
@@ -3052,7 +3052,7 @@ IDirect3DDeviceImpl_3_GetLightState(IDir
                                     D3DLIGHTSTATETYPE LightStateType,
                                     DWORD *Value)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     HRESULT hr;
 
     TRACE("iface %p, state %#x, value %p.\n", iface, LightStateType, Value);
@@ -3120,7 +3120,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, state %#x, value %p.\n", iface, LightStateType, Value);
 
-    return IDirect3DDevice3_GetLightState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, LightStateType, Value);
+    return IDirect3DDevice3_GetLightState(&This->IDirect3DDevice3_iface, LightStateType, Value);
 }
 
 /*****************************************************************************
@@ -3200,7 +3200,7 @@ IDirect3DDeviceImpl_7_SetTransform_FPUPr
 static HRESULT WINAPI IDirect3DDeviceImpl_3_SetTransform(IDirect3DDevice3 *iface,
         D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix);
 
@@ -3290,7 +3290,7 @@ IDirect3DDeviceImpl_7_GetTransform_FPUPr
 static HRESULT WINAPI IDirect3DDeviceImpl_3_GetTransform(IDirect3DDevice3 *iface,
         D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix);
 
@@ -3379,7 +3379,7 @@ IDirect3DDeviceImpl_7_MultiplyTransform_
 static HRESULT WINAPI IDirect3DDeviceImpl_3_MultiplyTransform(IDirect3DDevice3 *iface,
         D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
 
     TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix);
 
@@ -3490,7 +3490,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, FVF %#x, vertices %p, vertex_count %u, flags %#x.\n",
             iface, PrimitiveType, VertexType, Vertices, VertexCount, Flags);
 
-    return IDirect3DDevice7_DrawPrimitive((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawPrimitive((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, VertexType, Vertices, VertexCount, Flags);
 }
 
@@ -3614,7 +3614,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, FVF %#x, vertices %p, vertex_count %u, indices %p, index_count %u, flags %#x.\n",
             iface, PrimitiveType, VertexType, Vertices, VertexCount, Indices, IndexCount, Flags);
 
-    return IDirect3DDevice7_DrawIndexedPrimitive((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawIndexedPrimitive((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, VertexType, Vertices, VertexCount, Indices, IndexCount, Flags);
 }
 
@@ -3675,7 +3675,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     TRACE("iface %p, clip_status %p.\n", iface, ClipStatus);
 
-    return IDirect3DDevice7_SetClipStatus((IDirect3DDevice7 *)device_from_device3(iface), ClipStatus);
+    return IDirect3DDevice7_SetClipStatus((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), ClipStatus);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_2_SetClipStatus(IDirect3DDevice2 *iface,
@@ -3714,7 +3714,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     TRACE("iface %p, clip_status %p.\n", iface, ClipStatus);
 
-    return IDirect3DDevice7_GetClipStatus((IDirect3DDevice7 *)device_from_device3(iface), ClipStatus);
+    return IDirect3DDevice7_GetClipStatus((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), ClipStatus);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_2_GetClipStatus(IDirect3DDevice2 *iface,
@@ -3862,7 +3862,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, flags %#x.\n",
             iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Flags);
 
-    return IDirect3DDevice7_DrawPrimitiveStrided((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawPrimitiveStrided((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Flags);
 }
 
@@ -4007,7 +4007,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, indices %p, index_count %u, flags %#x.\n",
             iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Indices, IndexCount, Flags);
 
-    return IDirect3DDevice7_DrawIndexedPrimitiveStrided((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawIndexedPrimitiveStrided((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Indices, IndexCount, Flags);
 }
 
@@ -4117,7 +4117,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, vb %p, start_vertex %u, vertex_count %u, flags %#x.\n",
             iface, PrimitiveType, D3DVertexBuf, StartVertex, NumVertices, Flags);
 
-    return IDirect3DDevice7_DrawPrimitiveVB((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawPrimitiveVB((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, (IDirect3DVertexBuffer7 *)vb, StartVertex, NumVertices, Flags);
 }
 
@@ -4279,7 +4279,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, primitive_type %#x, vb %p, indices %p, index_count %u, flags %#x.\n",
             iface, PrimitiveType, D3DVertexBuf, Indices, IndexCount, Flags);
 
-    return IDirect3DDevice7_DrawIndexedPrimitiveVB((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_DrawIndexedPrimitiveVB((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             PrimitiveType, (IDirect3DVertexBuffer7 *)VB, 0, IndexCount, Indices, IndexCount, Flags);
 }
 
@@ -4400,7 +4400,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, centers %p, radii %p, sphere_count %u, flags %#x, return_values %p.\n",
             iface, Centers, Radii, NumSpheres, Flags, ReturnValues);
 
-    return IDirect3DDevice7_ComputeSphereVisibility((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_ComputeSphereVisibility((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             Centers, Radii, NumSpheres, Flags, ReturnValues);
 }
 
@@ -4486,7 +4486,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 
     TRACE("iface %p, stage %u, texture %p.\n", iface, Stage, Texture2);
 
-    ret = IDirect3DDevice7_GetTexture((IDirect3DDevice7 *)device_from_device3(iface), Stage, &ret_val);
+    ret = IDirect3DDevice7_GetTexture((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Stage, &ret_val);
 
     *Texture2 = ret_val ? (IDirect3DTexture2 *)&((IDirectDrawSurfaceImpl *)ret_val)->IDirect3DTexture2_vtbl : NULL;
 
@@ -4558,7 +4558,7 @@ IDirect3DDeviceImpl_3_SetTexture(IDirect
                                  DWORD Stage,
                                  IDirect3DTexture2 *Texture2)
 {
-    IDirect3DDeviceImpl *This = device_from_device3(iface);
+    IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface);
     IDirectDrawSurfaceImpl *tex = Texture2 ? surface_from_texture2(Texture2) : NULL;
     DWORD texmapblend;
     HRESULT hr;
@@ -4773,7 +4773,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, stage %u, state %#x, value %p.\n",
             iface, Stage, TexStageStateType, State);
 
-    return IDirect3DDevice7_GetTextureStageState((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_GetTextureStageState((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             Stage, TexStageStateType, State);
 }
 
@@ -4907,7 +4907,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
     TRACE("iface %p, stage %u, state %#x, value %#x.\n",
             iface, Stage, TexStageStateType, State);
 
-    return IDirect3DDevice7_SetTextureStageState((IDirect3DDevice7 *)device_from_device3(iface),
+    return IDirect3DDevice7_SetTextureStageState((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface),
             Stage, TexStageStateType, State);
 }
 
@@ -4969,7 +4969,7 @@ static HRESULT WINAPI IDirect3DDeviceImp
 {
     TRACE("iface %p, pass_count %p.\n", iface, Passes);
 
-    return IDirect3DDevice7_ValidateDevice((IDirect3DDevice7 *)device_from_device3(iface), Passes);
+    return IDirect3DDevice7_ValidateDevice((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Passes);
 }
 
 /*****************************************************************************
@@ -6765,7 +6765,7 @@ HRESULT d3d_device_init(IDirect3DDeviceI
     else
         device->lpVtbl = &d3d_device7_fpu_setup_vtbl;
 
-    device->IDirect3DDevice3_vtbl = &d3d_device3_vtbl;
+    device->IDirect3DDevice3_iface.lpVtbl = &d3d_device3_vtbl;
     device->IDirect3DDevice2_vtbl = &d3d_device2_vtbl;
     device->IDirect3DDevice_vtbl = &d3d_device1_vtbl;
     device->ref = 1;
diff -u -p a/dlls/ddraw/material.c b/dlls/ddraw/material.c
--- a/dlls/ddraw/material.c 2011-05-24 20:51:49.675143385 +0200
+++ b/dlls/ddraw/material.c 2011-05-24 22:04:43.749535695 +0200
@@ -301,7 +301,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3
                                 D3DMATERIALHANDLE *lpHandle)
 {
     IDirect3DMaterialImpl *This = (IDirect3DMaterialImpl *)iface;
-    IDirect3DDeviceImpl *device = device_from_device3(lpDirect3DDevice3);
+    IDirect3DDeviceImpl *device = BADBADBAD(lpDirect3DDevice3);
 
     TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice3, lpHandle);
 
@@ -332,7 +332,7 @@ static HRESULT WINAPI IDirect3DMaterialI
     TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice2, lpHandle);
 
     return IDirect3DMaterial3_GetHandle((IDirect3DMaterial3 *)material_from_material2(iface), lpDirect3DDevice2 ?
-            (IDirect3DDevice3 *)&device_from_device2(lpDirect3DDevice2)->IDirect3DDevice3_vtbl : NULL, lpHandle);
+            &device_from_device2(lpDirect3DDevice2)->IDirect3DDevice3_iface : NULL, lpHandle);
 }
 
 static HRESULT WINAPI IDirect3DMaterialImpl_1_GetHandle(IDirect3DMaterial *iface,
@@ -341,7 +341,7 @@ static HRESULT WINAPI IDirect3DMaterialI
     TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice, lpHandle);
 
     return IDirect3DMaterial3_GetHandle((IDirect3DMaterial3 *)material_from_material1(iface), lpDirect3DDevice ?
-            (IDirect3DDevice3 *)&device_from_device1(lpDirect3DDevice)->IDirect3DDevice3_vtbl : NULL, lpHandle);
+            &device_from_device1(lpDirect3DDevice)->IDirect3DDevice3_iface : NULL, lpHandle);
 }
 
 static HRESULT WINAPI IDirect3DMaterialImpl_2_QueryInterface(LPDIRECT3DMATERIAL2 iface, REFIID riid,
diff -u -p a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c
--- a/dlls/ddraw/vertexbuffer.c 2011-05-24 20:51:49.675143385 +0200
+++ b/dlls/ddraw/vertexbuffer.c 2011-05-24 22:04:43.826203351 +0200
@@ -348,7 +348,7 @@ static HRESULT WINAPI IDirect3DVertexBuf
         DWORD SrcIndex, IDirect3DDevice3 *D3DDevice, DWORD Flags)
 {
     IDirect3DVertexBufferImpl *Src = SrcBuffer ? vb_from_vb1(SrcBuffer) : NULL;
-    IDirect3DDeviceImpl *D3D = D3DDevice ? device_from_device3(D3DDevice) : NULL;
+    IDirect3DDeviceImpl *D3D = D3DDevice ? BADBADBAD(D3DDevice) : NULL;
 
     TRACE("iface %p, vertex_op %#x, dst_idx %u, count %u, src_buffer %p, src_idx %u, device %p, flags %#x.\n",
             iface, VertexOp, DestIndex, Count, SrcBuffer, SrcIndex, D3DDevice, Flags);
@@ -446,7 +446,7 @@ IDirect3DVertexBufferImpl_Optimize(IDire
 static HRESULT WINAPI IDirect3DVertexBufferImpl_1_Optimize(IDirect3DVertexBuffer *iface,
         IDirect3DDevice3 *D3DDevice, DWORD Flags)
 {
-    IDirect3DDeviceImpl *D3D = D3DDevice ? device_from_device3(D3DDevice) : NULL;
+    IDirect3DDeviceImpl *D3D = D3DDevice ? BADBADBAD(D3DDevice) : NULL;
 
     TRACE("iface %p, device %p, flags %#x.\n", iface, D3DDevice, Flags);
 


Reply via email to