[PATCH 2/5] dplayx: Add a stub IDirectPlay iface.
Michael Stefaniuc
mstefani at redhat.de
Mon Apr 8 16:17:36 CDT 2013
---
dlls/dplayx/dplay.c | 245 +++++++++++++++++++++++++++++++++++++++++++++
dlls/dplayx/dplay_global.h | 3 +-
2 files changed, 247 insertions(+), 1 deletion(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c
index 5fac4f0..ac39651 100644
--- a/dlls/dplayx/dplay.c
+++ b/dlls/dplayx/dplay.c
@@ -91,6 +91,11 @@ static void DP_CopySessionDesc( LPDPSESSIONDESC2 destSessionDesc,
static LONG kludgePlayerGroupId = 1000;
+static inline IDirectPlayImpl *impl_from_IDirectPlay( IDirectPlay *iface )
+{
+ return CONTAINING_RECORD( iface, IDirectPlayImpl, IDirectPlay_iface );
+}
+
static inline IDirectPlayImpl *impl_from_IDirectPlay2( IDirectPlay2 *iface )
{
return CONTAINING_RECORD( iface, IDirectPlayImpl, IDirectPlay2_iface );
@@ -362,6 +367,239 @@ HRESULT DP_HandleMessage( IDirectPlayImpl *This, const void *lpcMessageBody,
}
+static HRESULT WINAPI IDirectPlayImpl_QueryInterface( IDirectPlay *iface, REFIID riid, void **ppv )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ return IDirectPlayX_QueryInterface( &This->IDirectPlay4_iface, riid, ppv );
+}
+
+static ULONG WINAPI IDirectPlayImpl_AddRef( IDirectPlay *iface )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ ULONG ref = InterlockedIncrement( &This->ref );
+
+ TRACE( "(%p) ref=%d\n", This, ref );
+
+ if ( ref == 1 )
+ InterlockedIncrement( &This->numIfaces );
+
+ return ref;
+}
+
+static ULONG WINAPI IDirectPlayImpl_Release( IDirectPlay *iface )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ ULONG ref = InterlockedDecrement( &This->ref );
+
+ TRACE( "(%p) ref=%d\n", This, ref );
+
+ if ( !ref && !InterlockedDecrement( &This->numIfaces ) )
+ dplay_destroy( This );
+
+ return ref;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_AddPlayerToGroup( IDirectPlay *iface, DPID group,
+ DPID player )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,0x%08x): stub\n", This, group, player );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_Close( IDirectPlay *iface )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p): stub\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_CreatePlayer( IDirectPlay *iface, DPID *player,
+ LPSTR name, LPSTR fullname, HANDLE *event )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p,%s,%s,%p): stub\n", This, player, debugstr_a( name ), debugstr_a( fullname ),
+ event );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_CreateGroup( IDirectPlay *iface, DPID *group, LPSTR name,
+ LPSTR fullname )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p,%s,%s): stub\n", This, group, debugstr_a( name ), debugstr_a( fullname ) );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_DeletePlayerFromGroup( IDirectPlay *iface, DPID group,
+ DPID player )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,0x%08x): stub\n", This, group, player );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_DestroyPlayer( IDirectPlay *iface, DPID player )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x): stub\n", This, player );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_DestroyGroup( IDirectPlay *iface, DPID group )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x): stub\n", This, group );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_EnableNewPlayers( IDirectPlay *iface, BOOL enable )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%d): stub\n", This, enable );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_EnumGroupPlayers( IDirectPlay *iface, DPID group,
+ LPDPENUMPLAYERSCALLBACK enumplayercb, void *context, DWORD flags )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p,%p,0x%08x): stub\n", This, group, enumplayercb, context, flags );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_EnumGroups( IDirectPlay *iface, DWORD session,
+ LPDPENUMPLAYERSCALLBACK enumplayercb, void *context, DWORD flags )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p,%p,0x%08x): stub\n", This, session, enumplayercb, context, flags );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_EnumPlayers( IDirectPlay *iface, DWORD session,
+ LPDPENUMPLAYERSCALLBACK enumplayercb, void *context, DWORD flags )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p,%p,0x%08x): stub\n", This, session, enumplayercb, context, flags );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_EnumSessions( IDirectPlay *iface, DPSESSIONDESC *sdesc,
+ DWORD timeout, LPDPENUMSESSIONSCALLBACK enumsessioncb, void *context, DWORD flags )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p,%u,%p,%p,0x%08x): stub\n", This, sdesc, timeout, enumsessioncb, context,
+ flags );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_GetCaps( IDirectPlay *iface, DPCAPS *caps )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p): stub\n", This, caps );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_GetMessageCount( IDirectPlay *iface, DPID player,
+ DWORD *count )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p): stub\n", This, player, count );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_GetPlayerCaps( IDirectPlay *iface, DPID player, DPCAPS *caps )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p): stub\n", This, player, caps );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_GetPlayerName( IDirectPlay *iface, DPID player, LPSTR name,
+ DWORD *size_name, LPSTR fullname, DWORD *size_fullname )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%p,%p,%p,%p): stub\n", This, player, name, size_name, fullname,
+ size_fullname );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_Initialize( IDirectPlay *iface, GUID *guid )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p): stub\n", This, guid );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_Open( IDirectPlay *iface, DPSESSIONDESC *sdesc )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p): stub\n", This, sdesc );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_Receive( IDirectPlay *iface, DPID *from, DPID *to,
+ DWORD flags, void *data, DWORD *size )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p,%p,0x%08x,%p,%p): stub\n", This, from, to, flags, data, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_SaveSession( IDirectPlay *iface, LPSTR reserved )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(%p): stub\n", This, reserved );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_Send( IDirectPlay *iface, DPID from, DPID to, DWORD flags,
+ void *data, DWORD size )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,0x%08x,0x%08x,%p,%u): stub\n", This, from, to, flags, data, size );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirectPlayImpl_SetPlayerName( IDirectPlay *iface, DPID player, LPSTR name,
+ LPSTR fullname )
+{
+ IDirectPlayImpl *This = impl_from_IDirectPlay( iface );
+ FIXME( "(%p)->(0x%08x,%s,%s): stub\n", This, player, debugstr_a( name ),
+ debugstr_a ( fullname ) );
+ return E_NOTIMPL;
+}
+
+static const IDirectPlayVtbl dp_vt =
+{
+ IDirectPlayImpl_QueryInterface,
+ IDirectPlayImpl_AddRef,
+ IDirectPlayImpl_Release,
+ IDirectPlayImpl_AddPlayerToGroup,
+ IDirectPlayImpl_Close,
+ IDirectPlayImpl_CreatePlayer,
+ IDirectPlayImpl_CreateGroup,
+ IDirectPlayImpl_DeletePlayerFromGroup,
+ IDirectPlayImpl_DestroyPlayer,
+ IDirectPlayImpl_DestroyGroup,
+ IDirectPlayImpl_EnableNewPlayers,
+ IDirectPlayImpl_EnumGroupPlayers,
+ IDirectPlayImpl_EnumGroups,
+ IDirectPlayImpl_EnumPlayers,
+ IDirectPlayImpl_EnumSessions,
+ IDirectPlayImpl_GetCaps,
+ IDirectPlayImpl_GetMessageCount,
+ IDirectPlayImpl_GetPlayerCaps,
+ IDirectPlayImpl_GetPlayerName,
+ IDirectPlayImpl_Initialize,
+ IDirectPlayImpl_Open,
+ IDirectPlayImpl_Receive,
+ IDirectPlayImpl_SaveSession,
+ IDirectPlayImpl_Send,
+ IDirectPlayImpl_SetPlayerName,
+};
+
+
static HRESULT WINAPI IDirectPlay2AImpl_QueryInterface( IDirectPlay2A *iface, REFIID riid,
void **ppv )
{
@@ -407,6 +645,11 @@ static HRESULT WINAPI IDirectPlay4Impl_QueryInterface( IDirectPlay4 *iface, REFI
TRACE( "(%p)->(IID_IUnknown %p)\n", This, ppv );
*ppv = &This->IDirectPlay4A_iface;
}
+ else if ( IsEqualGUID( &IID_IDirectPlay, riid ) )
+ {
+ TRACE( "(%p)->(IID_IDirectPlay %p)\n", This, ppv );
+ *ppv = &This->IDirectPlay_iface;
+ }
else if ( IsEqualGUID( &IID_IDirectPlay2A, riid ) )
{
TRACE( "(%p)->(IID_IDirectPlay2A %p)\n", This, ppv );
@@ -5457,6 +5700,7 @@ HRESULT dplay_create( REFIID riid, void **ppv )
if ( !obj )
return DPERR_OUTOFMEMORY;
+ obj->IDirectPlay_iface.lpVtbl = &dp_vt;
obj->IDirectPlay2A_iface.lpVtbl = &dp2A_vt;
obj->IDirectPlay2_iface.lpVtbl = &dp2_vt;
obj->IDirectPlay3A_iface.lpVtbl = &dp3A_vt;
@@ -5464,6 +5708,7 @@ HRESULT dplay_create( REFIID riid, void **ppv )
obj->IDirectPlay4A_iface.lpVtbl = &dp4A_vt;
obj->IDirectPlay4_iface.lpVtbl = &dp4_vt;
obj->numIfaces = 1;
+ obj->ref = 0;
obj->ref2A = 0;
obj->ref2 = 0;
obj->ref3A = 0;
diff --git a/dlls/dplayx/dplay_global.h b/dlls/dplayx/dplay_global.h
index c48e5ae..1255519 100644
--- a/dlls/dplayx/dplay_global.h
+++ b/dlls/dplayx/dplay_global.h
@@ -182,6 +182,7 @@ typedef struct tagDirectPlay2Data
typedef struct IDirectPlayImpl
{
+ IDirectPlay IDirectPlay_iface;
IDirectPlay2A IDirectPlay2A_iface;
IDirectPlay2 IDirectPlay2_iface;
IDirectPlay3A IDirectPlay3A_iface;
@@ -189,7 +190,7 @@ typedef struct IDirectPlayImpl
IDirectPlay4A IDirectPlay4A_iface;
IDirectPlay4 IDirectPlay4_iface;
LONG numIfaces; /* "in use interfaces" refcount */
- LONG ref2A, ref2, ref3A, ref3, ref4A, ref4;
+ LONG ref, ref2A, ref2, ref3A, ref3, ref4A, ref4;
CRITICAL_SECTION lock;
DirectPlay2Data *dp2;
} IDirectPlayImpl;
--
1.7.11.7
More information about the wine-patches
mailing list