From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
This merges all the unicode versions to use the same interface. --- dlls/dplayx/dplobby.c | 319 +----------------------------------------- 1 file changed, 4 insertions(+), 315 deletions(-)
diff --git a/dlls/dplayx/dplobby.c b/dlls/dplayx/dplobby.c index 283096a530e..bf932dd25f9 100644 --- a/dlls/dplayx/dplobby.c +++ b/dlls/dplayx/dplobby.c @@ -63,8 +63,6 @@ typedef struct DPLMSG* LPDPLMSG;
typedef struct IDirectPlayLobbyImpl { - IDirectPlayLobby IDirectPlayLobby_iface; - IDirectPlayLobby2 IDirectPlayLobby2_iface; IDirectPlayLobby3 IDirectPlayLobby3_iface; IDirectPlayLobby3A IDirectPlayLobby3A_iface; LONG numIfaces; /* "in use interfaces" refcount */ @@ -75,16 +73,6 @@ typedef struct IDirectPlayLobbyImpl DPQ_HEAD( DPLMSG ) msgs; /* List of messages received */ } IDirectPlayLobbyImpl;
-static inline IDirectPlayLobbyImpl *impl_from_IDirectPlayLobby( IDirectPlayLobby *iface ) -{ - return CONTAINING_RECORD( iface, IDirectPlayLobbyImpl, IDirectPlayLobby_iface ); -} - -static inline IDirectPlayLobbyImpl *impl_from_IDirectPlayLobby2( IDirectPlayLobby2 *iface ) -{ - return CONTAINING_RECORD( iface, IDirectPlayLobbyImpl, IDirectPlayLobby2_iface ); -} - static inline IDirectPlayLobbyImpl *impl_from_IDirectPlayLobby3( IDirectPlayLobby3 *iface ) { return CONTAINING_RECORD( iface, IDirectPlayLobbyImpl, IDirectPlayLobby3_iface ); @@ -106,20 +94,6 @@ static void dplobby_destroy(IDirectPlayLobbyImpl *obj) free( obj ); }
-static HRESULT WINAPI IDirectPlayLobbyImpl_QueryInterface( IDirectPlayLobby *iface, REFIID riid, - void **ppv ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_QueryInterface( &This->IDirectPlayLobby3_iface, riid, ppv ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_QueryInterface( IDirectPlayLobby2 *iface, REFIID riid, - void **ppv ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_QueryInterface( &This->IDirectPlayLobby3_iface, riid, ppv ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_QueryInterface( IDirectPlayLobby3A *iface, REFIID riid, void **ppv ) { @@ -132,22 +106,10 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_QueryInterface( IDirectPlayLobby3 *i { IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby3( iface );
- if ( IsEqualGUID( &IID_IUnknown, riid ) ) - { - TRACE( "(%p)->(IID_IUnknown %p)\n", This, ppv ); - *ppv = &This->IDirectPlayLobby_iface; - } - else if ( IsEqualGUID( &IID_IDirectPlayLobby, riid ) ) - { - TRACE( "(%p)->(IID_IDirectPlayLobby %p)\n", This, ppv ); - *ppv = &This->IDirectPlayLobby_iface; - } - else if ( IsEqualGUID( &IID_IDirectPlayLobby2, riid ) ) - { - TRACE( "(%p)->(IID_IDirectPlayLobby2 %p)\n", This, ppv ); - *ppv = &This->IDirectPlayLobby2_iface; - } - else if ( IsEqualGUID( &IID_IDirectPlayLobby3, riid ) ) + if ( IsEqualGUID( &IID_IUnknown, riid ) || + IsEqualGUID( &IID_IDirectPlayLobby, riid ) || + IsEqualGUID( &IID_IDirectPlayLobby2, riid ) || + IsEqualGUID( &IID_IDirectPlayLobby3, riid ) ) { TRACE( "(%p)->(IID_IDirectPlay3 %p)\n", This, ppv ); *ppv = &This->IDirectPlayLobby3_iface; @@ -170,32 +132,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_QueryInterface( IDirectPlayLobby3 *i return S_OK; }
-static ULONG WINAPI IDirectPlayLobbyImpl_AddRef( IDirectPlayLobby *iface ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - ULONG ref = InterlockedIncrement( &This->ref ); - - TRACE( "(%p) ref=%ld\n", This, ref ); - - if ( ref == 1 ) - InterlockedIncrement( &This->numIfaces ); - - return ref; -} - -static ULONG WINAPI IDirectPlayLobby2Impl_AddRef(IDirectPlayLobby2 *iface) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - ULONG ref = InterlockedIncrement( &This->ref ); - - TRACE( "(%p) ref2=%ld\n", This, ref ); - - if ( ref == 1 ) - InterlockedIncrement( &This->numIfaces ); - - return ref; -} - static ULONG WINAPI IDirectPlayLobby3AImpl_AddRef(IDirectPlayLobby3A *iface) { IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby3A( iface ); @@ -222,32 +158,6 @@ static ULONG WINAPI IDirectPlayLobby3Impl_AddRef(IDirectPlayLobby3 *iface) return ref; }
-static ULONG WINAPI IDirectPlayLobbyImpl_Release( IDirectPlayLobby *iface ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - ULONG ref = InterlockedDecrement( &This->ref ); - - TRACE( "(%p) ref=%ld\n", This, ref ); - - if ( !ref && !InterlockedDecrement( &This->numIfaces ) ) - dplobby_destroy( This ); - - return ref; -} - -static ULONG WINAPI IDirectPlayLobby2Impl_Release(IDirectPlayLobby2 *iface) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - ULONG ref = InterlockedDecrement( &This->ref ); - - TRACE( "(%p) ref=%ld\n", This, ref ); - - if ( !ref && !InterlockedDecrement( &This->numIfaces ) ) - dplobby_destroy( This ); - - return ref; -} - static ULONG WINAPI IDirectPlayLobby3AImpl_Release(IDirectPlayLobby3A *iface) { IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby3A( iface ); @@ -361,20 +271,6 @@ static HRESULT DPL_ConnectEx( IDirectPlayLobbyImpl *This, DWORD dwFlags, REFIID return hr; }
-static HRESULT WINAPI IDirectPlayLobbyImpl_Connect( IDirectPlayLobby *iface, DWORD flags, - IDirectPlay2A **dp, IUnknown *unk ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_Connect( &This->IDirectPlayLobby3_iface, flags, dp, unk ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_Connect( IDirectPlayLobby2 *iface, DWORD flags, - IDirectPlay2A **dp, IUnknown *unk ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_Connect( &This->IDirectPlayLobby3_iface, flags, dp, unk ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_Connect( IDirectPlayLobby3A *iface, DWORD flags, IDirectPlay2A **dp, IUnknown *unk) { @@ -399,22 +295,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_Connect( IDirectPlayLobby3 *iface, D * with no error checking on the contents. */
-static HRESULT WINAPI IDirectPlayLobbyImpl_CreateAddress( IDirectPlayLobby *iface, REFGUID sp, - REFGUID datatype, const void *data, DWORD datasize, void *address, DWORD *addrsize ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_CreateAddress( &This->IDirectPlayLobby3_iface, sp, datatype, data, - datasize, address, addrsize ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_CreateAddress( IDirectPlayLobby2 *iface, REFGUID sp, - REFGUID datatype, const void *data, DWORD datasize, void *address, DWORD *addrsize ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_CreateAddress( &This->IDirectPlayLobby3_iface, sp, datatype, data, - datasize, address, addrsize ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_CreateAddress( IDirectPlayLobby3A *iface, REFGUID guidSP, REFGUID guidDataType, const void *lpData, DWORD dwDataSize, void *lpAddress, DWORD *lpdwAddressSize ) @@ -468,22 +348,6 @@ static HRESULT DPL_CreateAddress( * given callback function, with lpContext, for each of the chunks. * */ -static HRESULT WINAPI IDirectPlayLobbyImpl_EnumAddress( IDirectPlayLobby *iface, - LPDPENUMADDRESSCALLBACK enumaddrcb, const void *address, DWORD size, void *context ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_EnumAddress( &This->IDirectPlayLobby3_iface, enumaddrcb, address, size, - context ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_EnumAddress( IDirectPlayLobby2 *iface, - LPDPENUMADDRESSCALLBACK enumaddrcb, const void *address, DWORD size, void *context ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_EnumAddress( &This->IDirectPlayLobby3_iface, enumaddrcb, address, size, - context ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_EnumAddress( IDirectPlayLobby3A *iface, LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, const void *lpAddress, DWORD dwAddressSize, void *lpContext ) @@ -543,22 +407,6 @@ HRESULT DPL_EnumAddress( LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID * build the DirectPlay Address. * */ -static HRESULT WINAPI IDirectPlayLobbyImpl_EnumAddressTypes( IDirectPlayLobby *iface, - LPDPLENUMADDRESSTYPESCALLBACK enumaddrtypecb, REFGUID sp, void *context, DWORD flags ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_EnumAddressTypes( &This->IDirectPlayLobby3_iface, enumaddrtypecb, sp, - context, flags ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_EnumAddressTypes( IDirectPlayLobby2 *iface, - LPDPLENUMADDRESSTYPESCALLBACK enumaddrtypecb, REFGUID sp, void *context, DWORD flags ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_EnumAddressTypes( &This->IDirectPlayLobby3_iface, enumaddrtypecb, sp, - context, flags ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_EnumAddressTypes( IDirectPlayLobby3A *iface, LPDPLENUMADDRESSTYPESCALLBACK lpEnumAddressTypeCallback, REFGUID guidSP, void *lpContext, DWORD dwFlags ) @@ -704,22 +552,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_EnumLocalApplications( IDirectPlayLo return DPERR_OUTOFMEMORY; }
-static HRESULT WINAPI IDirectPlayLobbyImpl_EnumLocalApplications( IDirectPlayLobby *iface, - LPDPLENUMLOCALAPPLICATIONSCALLBACK enumlocalappcb, void *context, DWORD flags ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_EnumLocalApplications( &This->IDirectPlayLobby3_iface, enumlocalappcb, - context, flags ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_EnumLocalApplications( IDirectPlayLobby2 *iface, - LPDPLENUMLOCALAPPLICATIONSCALLBACK enumlocalappcb, void *context, DWORD flags ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_EnumLocalApplications( &This->IDirectPlayLobby3_iface, enumlocalappcb, - context, flags ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_EnumLocalApplications( IDirectPlayLobby3A *iface, LPDPLENUMLOCALAPPLICATIONSCALLBACK lpEnumLocalAppCallback, void *lpContext, DWORD dwFlags ) { @@ -820,22 +652,6 @@ static HRESULT WINAPI IDirectPlayLobby3AImpl_EnumLocalApplications( IDirectPlayL * call this procedure/method again with a valid data pointer. */
-static HRESULT WINAPI IDirectPlayLobbyImpl_GetConnectionSettings( IDirectPlayLobby *iface, - DWORD appid, void *data, DWORD *size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_GetConnectionSettings( &This->IDirectPlayLobby3_iface, appid, data, - size ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_GetConnectionSettings( IDirectPlayLobby2 *iface, - DWORD appid, void *data, DWORD *size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_GetConnectionSettings( &This->IDirectPlayLobby3_iface, appid, data, - size ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_GetConnectionSettings( IDirectPlayLobby3A *iface, DWORD dwAppID, void *lpData, DWORD *lpdwDataSize ) { @@ -883,22 +699,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_GetConnectionSettings( IDirectPlayLo * */
-static HRESULT WINAPI IDirectPlayLobbyImpl_ReceiveLobbyMessage( IDirectPlayLobby *iface, - DWORD flags, DWORD appid, DWORD *msgflags, void *data, DWORD *size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_ReceiveLobbyMessage( &This->IDirectPlayLobby3_iface, flags, appid, - msgflags, data, size ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_ReceiveLobbyMessage( IDirectPlayLobby2 *iface, - DWORD flags, DWORD appid, DWORD *msgflags, void *data, DWORD *size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_ReceiveLobbyMessage( &This->IDirectPlayLobby3_iface, flags, appid, - msgflags, data, size ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_ReceiveLobbyMessage( IDirectPlayLobby3A *iface, DWORD dwFlags, DWORD dwAppID, DWORD *lpdwMessageFlags, void *lpData, DWORD *lpdwDataSize ) @@ -1060,22 +860,6 @@ static BOOL DPL_CreateAndSetLobbyHandles( DWORD dwDestProcessId, HANDLE hDestPro * connect to a session. * */ -static HRESULT WINAPI IDirectPlayLobbyImpl_RunApplication( IDirectPlayLobby *iface, DWORD flags, - DWORD *appid, DPLCONNECTION *conn, HANDLE event ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_RunApplication( &This->IDirectPlayLobby3_iface, flags, appid, conn, - event ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_RunApplication( IDirectPlayLobby2 *iface, DWORD flags, - DWORD *appid, DPLCONNECTION *conn, HANDLE event ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_RunApplication( &This->IDirectPlayLobby3_iface, flags, appid, conn, - event ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_RunApplication( IDirectPlayLobby3A *iface, DWORD dwFlags, DWORD *lpdwAppID, DPLCONNECTION *lpConn, HANDLE hReceiveEvent ) { @@ -1214,21 +998,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_RunApplication( IDirectPlayLobby3 *i * All messages are queued until received. * */ -static HRESULT WINAPI IDirectPlayLobbyImpl_SendLobbyMessage( IDirectPlayLobby *iface, DWORD flags, - DWORD appid, void *data, DWORD size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_SendLobbyMessage( &This->IDirectPlayLobby3_iface, flags, appid, data, - size ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_SendLobbyMessage( IDirectPlayLobby2 *iface, DWORD flags, - DWORD appid, void *data, DWORD size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_SendLobbyMessage( &This->IDirectPlayLobby3_iface, flags, appid, data, - size ); -}
static HRESULT WINAPI IDirectPlayLobby3AImpl_SendLobbyMessage( IDirectPlayLobby3A *iface, DWORD flags, DWORD appid, void *data, DWORD size ) @@ -1281,21 +1050,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_SetConnectionSettings( IDirectPlayLo return hr; }
-static HRESULT WINAPI IDirectPlayLobbyImpl_SetConnectionSettings( IDirectPlayLobby *iface, - DWORD flags, DWORD appid, DPLCONNECTION *conn ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_SetConnectionSettings( &This->IDirectPlayLobby3_iface, flags, - appid, conn ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_SetConnectionSettings( IDirectPlayLobby2 *iface, - DWORD flags, DWORD appid, DPLCONNECTION *conn ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_SetConnectionSettings( &This->IDirectPlayLobby3_iface, flags, - appid, conn ); -}
static HRESULT WINAPI IDirectPlayLobby3AImpl_SetConnectionSettings( IDirectPlayLobby3A *iface, DWORD dwFlags, DWORD dwAppID, DPLCONNECTION *lpConn ) @@ -1330,22 +1084,6 @@ static HRESULT WINAPI IDirectPlayLobby3AImpl_SetConnectionSettings( IDirectPlayL * Registers an event that will be set when a lobby message is received. * */ -static HRESULT WINAPI IDirectPlayLobbyImpl_SetLobbyMessageEvent( IDirectPlayLobby *iface, - DWORD flags, DWORD appid, HANDLE event ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby( iface ); - return IDirectPlayLobby_SetLobbyMessageEvent( &This->IDirectPlayLobby3_iface, flags, appid, - event ); -} - -static HRESULT WINAPI IDirectPlayLobby2Impl_SetLobbyMessageEvent( IDirectPlayLobby2 *iface, - DWORD flags, DWORD appid, HANDLE event ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_SetLobbyMessageEvent( &This->IDirectPlayLobby3_iface, flags, appid, - event ); -} - static HRESULT WINAPI IDirectPlayLobby3AImpl_SetLobbyMessageEvent( IDirectPlayLobby3A *iface, DWORD flags, DWORD appid, HANDLE event ) { @@ -1360,16 +1098,6 @@ static HRESULT WINAPI IDirectPlayLobby3Impl_SetLobbyMessageEvent( IDirectPlayLob return DPERR_OUTOFMEMORY; }
- -/* DPL 2 methods */ -static HRESULT WINAPI IDirectPlayLobby2Impl_CreateCompoundAddress( IDirectPlayLobby2 *iface, - const DPCOMPOUNDADDRESSELEMENT *elements, DWORD count, void *address, DWORD *size ) -{ - IDirectPlayLobbyImpl *This = impl_from_IDirectPlayLobby2( iface ); - return IDirectPlayLobby_CreateCompoundAddress( &This->IDirectPlayLobby3_iface, elements, - count, address, size ); -} - static HRESULT WINAPI IDirectPlayLobby3Impl_CreateCompoundAddress( IDirectPlayLobby3 *iface, const DPCOMPOUNDADDRESSELEMENT *lpElements, DWORD dwElementCount, void *lpAddress, DWORD *lpdwAddressSize ) @@ -1631,43 +1359,6 @@ static HRESULT WINAPI IDirectPlayLobby3AImpl_WaitForConnectionSettings( IDirectP return hr; }
-static const IDirectPlayLobbyVtbl dpl_vt = -{ - IDirectPlayLobbyImpl_QueryInterface, - IDirectPlayLobbyImpl_AddRef, - IDirectPlayLobbyImpl_Release, - IDirectPlayLobbyImpl_Connect, - IDirectPlayLobbyImpl_CreateAddress, - IDirectPlayLobbyImpl_EnumAddress, - IDirectPlayLobbyImpl_EnumAddressTypes, - IDirectPlayLobbyImpl_EnumLocalApplications, - IDirectPlayLobbyImpl_GetConnectionSettings, - IDirectPlayLobbyImpl_ReceiveLobbyMessage, - IDirectPlayLobbyImpl_RunApplication, - IDirectPlayLobbyImpl_SendLobbyMessage, - IDirectPlayLobbyImpl_SetConnectionSettings, - IDirectPlayLobbyImpl_SetLobbyMessageEvent -}; - -static const IDirectPlayLobby2Vtbl dpl2_vt = -{ - IDirectPlayLobby2Impl_QueryInterface, - IDirectPlayLobby2Impl_AddRef, - IDirectPlayLobby2Impl_Release, - IDirectPlayLobby2Impl_Connect, - IDirectPlayLobby2Impl_CreateAddress, - IDirectPlayLobby2Impl_EnumAddress, - IDirectPlayLobby2Impl_EnumAddressTypes, - IDirectPlayLobby2Impl_EnumLocalApplications, - IDirectPlayLobby2Impl_GetConnectionSettings, - IDirectPlayLobby2Impl_ReceiveLobbyMessage, - IDirectPlayLobby2Impl_RunApplication, - IDirectPlayLobby2Impl_SendLobbyMessage, - IDirectPlayLobby2Impl_SetConnectionSettings, - IDirectPlayLobby2Impl_SetLobbyMessageEvent, - IDirectPlayLobby2Impl_CreateCompoundAddress -}; - static const IDirectPlayLobby3Vtbl dpl3A_vt = { IDirectPlayLobby3AImpl_QueryInterface, @@ -1726,8 +1417,6 @@ HRESULT dplobby_create( REFIID riid, void **ppv ) if ( !obj ) return DPERR_OUTOFMEMORY;
- obj->IDirectPlayLobby_iface.lpVtbl = &dpl_vt; - obj->IDirectPlayLobby2_iface.lpVtbl = &dpl2_vt; obj->IDirectPlayLobby3_iface.lpVtbl = &dpl3_vt; obj->IDirectPlayLobby3A_iface.lpVtbl = &dpl3A_vt; obj->numIfaces = 1;