[PATCH 7/7] dplayx: Simplify the creation of a IDPLobbySPImpl COM object.

Michael Stefaniuc mstefani at redhat.de
Tue Sep 3 16:24:58 CDT 2013


---
 dlls/dplayx/dplay.c        |  3 +--
 dlls/dplayx/dplay_global.h |  2 +-
 dlls/dplayx/lobbysp.c      | 56 ++++++++++++++++++----------------------------
 3 files changed, 24 insertions(+), 37 deletions(-)

diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 4529c5e..94ba844 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -187,8 +187,7 @@ static BOOL DP_CreateDirectPlay2( LPVOID lpDP )
                                          sizeof( *This->dp2->dplspData.lpCB ) );
   This->dp2->dplspData.lpCB->dwSize = sizeof(  *This->dp2->dplspData.lpCB );
 
-  if( FAILED( DPLSP_CreateInterface( &IID_IDPLobbySP,
-                                     (LPVOID*)&This->dp2->dplspData.lpISP, This ) )
+  if( FAILED( dplobbysp_create( &IID_IDPLobbySP, (void**)&This->dp2->dplspData.lpISP, This ) )
     )
   {
     /* FIXME: Memory leak */
diff --git a/dlls/dplayx/dplay_global.h b/dlls/dplayx/dplay_global.h
index 7fde277..dca6396 100644
--- a/dlls/dplayx/dplay_global.h
+++ b/dlls/dplayx/dplay_global.h
@@ -209,6 +209,6 @@ extern LPVOID DPSP_CreateSPPlayerData(void) DECLSPEC_HIDDEN;
 extern HRESULT dplay_create( REFIID riid, void **ppv ) DECLSPEC_HIDDEN;
 extern HRESULT dplobby_create( REFIID riid, void **ppv ) DECLSPEC_HIDDEN;
 extern HRESULT DPSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN;
-extern HRESULT DPLSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN;
+extern HRESULT dplobbysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp ) DECLSPEC_HIDDEN;
 
 #endif /* __WINE_DPLAY_GLOBAL_INCLUDED */
diff --git a/dlls/dplayx/lobbysp.c b/dlls/dplayx/lobbysp.c
index 8b0c24c..72198da 100644
--- a/dlls/dplayx/lobbysp.c
+++ b/dlls/dplayx/lobbysp.c
@@ -38,40 +38,6 @@ static inline IDPLobbySPImpl *impl_from_IDPLobbySP(IDPLobbySP *iface)
     return CONTAINING_RECORD(iface, IDPLobbySPImpl, IDPLobbySP_iface);
 }
 
-/* Forward declaration of virtual tables */
-static const IDPLobbySPVtbl dpLobbySPVT;
-
-HRESULT DPLSP_CreateInterface( REFIID riid, void **ppvObj, IDirectPlayImpl *dp )
-{
-  TRACE( " for %s\n", debugstr_guid( riid ) );
-
-  *ppvObj = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
-                       sizeof( IDPLobbySPImpl ) );
-
-  if( *ppvObj == NULL )
-  {
-    return DPERR_OUTOFMEMORY;
-  }
-
-  if( IsEqualGUID( &IID_IDPLobbySP, riid ) )
-  {
-    IDPLobbySPImpl *This = *ppvObj;
-    This->IDPLobbySP_iface.lpVtbl = &dpLobbySPVT;
-    This->dplay = dp;
-  }
-  else
-  {
-    /* Unsupported interface */
-    HeapFree( GetProcessHeap(), 0, *ppvObj );
-    *ppvObj = NULL;
-
-    return E_NOINTERFACE;
-  }
-
-  IDPLobbySP_AddRef( (LPDPLOBBYSP)*ppvObj );
-  return S_OK;
-}
-
 static HRESULT WINAPI IDPLobbySPImpl_QueryInterface( IDPLobbySP *iface, REFIID riid,
         void **ppv )
 {
@@ -260,3 +226,25 @@ static const IDPLobbySPVtbl dpLobbySPVT =
   IDPLobbySPImpl_SetSPDataPointer,
   IDPLobbySPImpl_StartSession
 };
+
+HRESULT dplobbysp_create( REFIID riid, void **ppv, IDirectPlayImpl *dp )
+{
+  IDPLobbySPImpl *obj;
+  HRESULT hr;
+
+  TRACE( "(%s, %p)\n", debugstr_guid( riid ), ppv );
+
+  *ppv = NULL;
+  obj = HeapAlloc( GetProcessHeap(), 0, sizeof( *obj ) );
+  if ( !obj )
+    return DPERR_OUTOFMEMORY;
+
+  obj->IDPLobbySP_iface.lpVtbl = &dpLobbySPVT;
+  obj->ref = 0;
+  obj->dplay = dp;
+
+  hr = IDPLobbySP_QueryInterface( &obj->IDPLobbySP_iface, riid, ppv );
+  IDPLobbySP_Release( &obj->IDPLobbySP_iface );
+
+  return hr;
+}
-- 
1.8.3.1



More information about the wine-patches mailing list