Vitaliy Margolen : dinput: Convert DirectInput to using interface instead of vtbl.

Alexandre Julliard julliard at winehq.org
Wed Dec 29 11:14:49 CST 2010


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

Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date:   Tue Dec 28 12:24:38 2010 -0700

dinput: Convert DirectInput to using interface instead of vtbl.

---

 dlls/dinput/dinput_main.c    |   45 +++++++++++++++++++++++------------------
 dlls/dinput/dinput_private.h |    8 +++---
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 066d8a8..d0943c2 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -56,24 +56,29 @@ static const IDirectInput7WVtbl ddi7wvt;
 static const IDirectInput8AVtbl ddi8avt;
 static const IDirectInput8WVtbl ddi8wvt;
 
+static inline IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface )
+{
+    return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7A_iface );
+}
+
 static inline IDirectInputImpl *impl_from_IDirectInput7W( IDirectInput7W *iface )
 {
-    return CONTAINING_RECORD( iface, IDirectInputImpl, lpVtbl7w );
+    return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7W_iface );
 }
 
 static inline IDirectInputImpl *impl_from_IDirectInput8A( IDirectInput8A *iface )
 {
-    return CONTAINING_RECORD( iface, IDirectInputImpl, lpVtbl8a );
+    return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput8A_iface );
 }
 
 static inline IDirectInputImpl *impl_from_IDirectInput8W( IDirectInput8W *iface )
 {
-    return CONTAINING_RECORD( iface, IDirectInputImpl, lpVtbl8w );
+    return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput8W_iface );
 }
 
 static inline IDirectInput7W *IDirectInput7W_from_impl( IDirectInputImpl *iface )
 {
-    return (IDirectInput7W *)(&iface->lpVtbl7w);
+    return (IDirectInput7W *)(&iface->IDirectInput7W_iface);
 }
 
 static const struct dinput_device *dinput_devices[] =
@@ -133,10 +138,10 @@ HRESULT WINAPI DirectInputCreateEx(
     else
         return DIERR_OLDDIRECTINPUTVERSION;
 
-    This->lpVtbl      = &ddi7avt;
-    This->lpVtbl7w    = &ddi7wvt;
-    This->lpVtbl8a    = &ddi8avt;
-    This->lpVtbl8w    = &ddi8wvt;
+    This->IDirectInput7A_iface.lpVtbl = &ddi7avt;
+    This->IDirectInput7W_iface.lpVtbl = &ddi7wvt;
+    This->IDirectInput8A_iface.lpVtbl = &ddi8avt;
+    This->IDirectInput8W_iface.lpVtbl = &ddi8wvt;
     This->ref         = 0;
     This->dwVersion   = dwVersion;
     This->evsequence  = 1;
@@ -252,7 +257,7 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
 	LPDIRECTINPUT7A iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback,
 	LPVOID pvRef, DWORD dwFlags)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A(iface);
     DIDEVICEINSTANCEA devInstance;
     unsigned int i;
     int j, r;
@@ -310,7 +315,7 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices(
 
 static ULONG WINAPI IDirectInputAImpl_AddRef(LPDIRECTINPUT7A iface)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
     ULONG ref = InterlockedIncrement(&This->ref);
 
     TRACE( "(%p) incrementing from %d\n", This, ref - 1);
@@ -325,7 +330,7 @@ static ULONG WINAPI IDirectInputWImpl_AddRef(LPDIRECTINPUT7W iface)
 
 static ULONG WINAPI IDirectInputAImpl_Release(LPDIRECTINPUT7A iface)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
     ULONG ref = InterlockedDecrement( &This->ref );
 
     TRACE( "(%p) releasing from %d\n", This, ref + 1 );
@@ -354,7 +359,7 @@ static ULONG WINAPI IDirectInputWImpl_Release(LPDIRECTINPUT7W iface)
 
 static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, REFIID riid, LPVOID *ppobj)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
 
     TRACE( "(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj );
 
@@ -363,7 +368,7 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
         IsEqualGUID( &IID_IDirectInput2A, riid ) ||
         IsEqualGUID( &IID_IDirectInput7A, riid ))
     {
-        *ppobj = &This->lpVtbl;
+        *ppobj = &This->IDirectInput7A_iface;
         IUnknown_AddRef( (IUnknown*)*ppobj );
 
         return DI_OK;
@@ -373,7 +378,7 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
         IsEqualGUID( &IID_IDirectInput2W, riid ) ||
         IsEqualGUID( &IID_IDirectInput7W, riid ))
     {
-        *ppobj = &This->lpVtbl7w;
+        *ppobj = &This->IDirectInput7W_iface;
         IUnknown_AddRef( (IUnknown*)*ppobj );
 
         return DI_OK;
@@ -381,7 +386,7 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
 
     if (IsEqualGUID( &IID_IDirectInput8A, riid ))
     {
-        *ppobj = &This->lpVtbl8a;
+        *ppobj = &This->IDirectInput8A_iface;
         IUnknown_AddRef( (IUnknown*)*ppobj );
 
         return DI_OK;
@@ -389,7 +394,7 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
 
     if (IsEqualGUID( &IID_IDirectInput8W, riid ))
     {
-        *ppobj = &This->lpVtbl8w;
+        *ppobj = &This->IDirectInput8W_iface;
         IUnknown_AddRef( (IUnknown*)*ppobj );
 
         return DI_OK;
@@ -423,7 +428,7 @@ static HRESULT WINAPI IDirectInputWImpl_Initialize(LPDIRECTINPUT7W iface, HINSTA
 
 static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUT7A iface, REFGUID rguid)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
     HRESULT hr;
     LPDIRECTINPUTDEVICEA device;
 
@@ -447,7 +452,7 @@ static HRESULT WINAPI IDirectInputAImpl_RunControlPanel(LPDIRECTINPUT7A iface,
 							HWND hwndOwner,
 							DWORD dwFlags)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
 
     FIXME( "(%p)->(%p,%08x): stub\n", This, hwndOwner, dwFlags );
 
@@ -463,7 +468,7 @@ static HRESULT WINAPI IDirectInputWImpl_RunControlPanel(LPDIRECTINPUT7W iface, H
 static HRESULT WINAPI IDirectInput2AImpl_FindDevice(LPDIRECTINPUT7A iface, REFGUID rguid,
 						    LPCSTR pszName, LPGUID pguidInstance)
 {
-    IDirectInputImpl *This = (IDirectInputImpl *)iface;
+    IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
 
     FIXME( "(%p)->(%s, %s, %p): stub\n", This, debugstr_guid(rguid), pszName, pguidInstance );
 
@@ -483,7 +488,7 @@ static HRESULT WINAPI IDirectInput2WImpl_FindDevice(LPDIRECTINPUT7W iface, REFGU
 static HRESULT WINAPI IDirectInput7AImpl_CreateDeviceEx(LPDIRECTINPUT7A iface, REFGUID rguid,
 							REFIID riid, LPVOID* pvOut, LPUNKNOWN lpUnknownOuter)
 {
-  IDirectInputImpl *This = (IDirectInputImpl *)iface;
+  IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
   HRESULT ret_value = DIERR_DEVICENOTREG;
   unsigned int i;
 
diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h
index 16b4559..b2b4c00 100644
--- a/dlls/dinput/dinput_private.h
+++ b/dlls/dinput/dinput_private.h
@@ -30,10 +30,10 @@
 typedef struct IDirectInputImpl IDirectInputImpl;
 struct IDirectInputImpl
 {
-    const IDirectInput7AVtbl   *lpVtbl;
-    const IDirectInput7WVtbl   *lpVtbl7w;
-    const IDirectInput8AVtbl   *lpVtbl8a;
-    const IDirectInput8WVtbl   *lpVtbl8w;
+    IDirectInput7A              IDirectInput7A_iface;
+    IDirectInput7W              IDirectInput7W_iface;
+    IDirectInput8A              IDirectInput8A_iface;
+    IDirectInput8W              IDirectInput8W_iface;
 
     LONG                        ref;
 




More information about the wine-cvs mailing list