Added macros to header file for easier function calling.
Changed implementation a little bit.
Added stubs for dplay3. Still need to break into A and W versions.
diff --git a/include/dplay.h b/include/dplay.h
index d9a1147..d75d54f 100644
--- a/include/dplay.h
+++ b/include/dplay.h
@@ -526,120 +526,120 @@
**********************************************************************************/
/* COM Interface */
-#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectPlay_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectPlay_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->fnQueryInterface(p,a,b)
+#define IDirectPlay_AddRef(p) (p)->lpVtbl->fnAddRef(p)
+#define IDirectPlay_Release(p) (p)->lpVtbl->fnRelease(p)
-#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectPlay2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectPlay2_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->fnQueryInterface(p,a,b)
+#define IDirectPlay2_AddRef(p) (p)->lpVtbl->fnAddRef(p)
+#define IDirectPlay2_Release(p) (p)->lpVtbl->fnRelease(p)
-#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectPlay3_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectPlay3_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->fnQueryInterface(p,a,b)
+#define IDirectPlay3_AddRef(p) (p)->lpVtbl->fnAddRef(p)
+#define IDirectPlay3_Release(p) (p)->lpVtbl->fnRelease(p)
/* Direct Play 1&2 Interface */
-#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
-#define IDirectPlay_Close(p) (p)->lpVtbl->Close(p)
-#define IDirectPlay_CreateGroup(p,a,b,c) (p)->lpVtbl->CreateGroup(p,a,b,c)
-#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->lpVtbl->CreatePlayer(p,a,b,c,d)
-#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
-#define IDirectPlay_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
-#define IDirectPlay_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
-#define IDirectPlay_EnableNewPlayers(p,a) (p)->lpVtbl->EnableNewPlayers(p,a)
-#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d)
-#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
-#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
-#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
-#define IDirectPlay_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
-#define IDirectPlay_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
-#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->lpVtbl->GetPlayerCaps(p,a,b)
-#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e)
-#define IDirectPlay_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirectPlay_Open(p,a) (p)->lpVtbl->Open(p,a)
-#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
-#define IDirectPlay_SaveSession(p,a) (p)->lpVtbl->SaveSession(p,a)
-#define IDirectPlay_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
-#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
+#define IDirectPlay_Close(p) (p)->lpVtbl->fnClose(p)
+#define IDirectPlay_CreateGroup(p,a,b,c) (p)->lpVtbl->fnCreateGroup(p,a,b,c)
+#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d)
+#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
+#define IDirectPlay_DestroyGroup(p,a) (p)->lpVtbl->fnDestroyGroup(p,a)
+#define IDirectPlay_DestroyPlayer(p,a) (p)->lpVtbl->fnDestroyPlayer(p,a)
+#define IDirectPlay_EnableNewPlayers(p,a) (p)->lpVtbl->fnEnableNewPlayers(p,a)
+#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
+#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
+#define IDirectPlay_GetCaps(p,a) (p)->lpVtbl->fnGetCaps(p,a)
+#define IDirectPlay_GetMessageCount(p,a,b) (p)->lpVtbl->fnGetMessageCount(p,a,b)
+#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->lpVtbl->fnGetPlayerCaps(p,a,b)
+#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->lpVtbl->fnGetPlayerName(p,a,b,c,d,e)
+#define IDirectPlay_Initialize(p,a) (p)->lpVtbl->fnInitialize(p,a)
+#define IDirectPlay_Open(p,a) (p)->lpVtbl->fnOpen(p,a)
+#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
+#define IDirectPlay_SaveSession(p,a) (p)->lpVtbl->fnSaveSession(p,a)
+#define IDirectPlay_Send(p,a,b,c,d,e) (p)->lpVtbl->fnSend(p,a,b,c,d,e)
+#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
-#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
-#define IDirectPlay2_Close(p) (p)->lpVtbl->Close(p)
-#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
-#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
-#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
-#define IDirectPlay2_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
-#define IDirectPlay2_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
-#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
-#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
-#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
-#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
-#define IDirectPlay2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
-#define IDirectPlay2_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
-#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d)
-#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c)
-#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
-#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
-#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
-#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c)
-#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b)
-#define IDirectPlay2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirectPlay2_Open(p,a,b) (p)->lpVtbl->Open(p,a,b)
-#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
-#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
-#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d)
-#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c)
-#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
-#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
-#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b)
+#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
+#define IDirectPlay2_Close(p) (p)->lpVtbl->fnClose(p)
+#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->fnCreateGroup(p,a,b,c,d,e)
+#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
+#define IDirectPlay2_DestroyGroup(p,a) (p)->lpVtbl->fnDestroyGroup(p,a)
+#define IDirectPlay2_DestroyPlayer(p,a) (p)->lpVtbl->fnDestroyPlayer(p,a)
+#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
+#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
+#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
+#define IDirectPlay2_GetCaps(p,a,b) (p)->lpVtbl->fnGetCaps(p,a,b)
+#define IDirectPlay2_GetMessageCount(p,a,b) (p)->lpVtbl->fnGetMessageCount(p,a,b)
+#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->lpVtbl->fnGetGroupData(p,a,b,c,d)
+#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->lpVtbl->fnGetGroupName(p,a,b,c)
+#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->fnGetPlayerAddress(p,a,b,c)
+#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->fnGetPlayerCaps(p,a,b,c)
+#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->fnGetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->lpVtbl->fnGetPlayerName(p,a,b,c)
+#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->lpVtbl->fnGetSessionDesc(p,a,b)
+#define IDirectPlay2_Initialize(p,a) (p)->lpVtbl->fnInitialize(p,a)
+#define IDirectPlay2_Open(p,a,b) (p)->lpVtbl->fnOpen(p,a,b)
+#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
+#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->lpVtbl->fnSend(p,a,b,c,d,e)
+#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->lpVtbl->fnSetGroupData(p,a,b,c,d)
+#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->lpVtbl->fnSetGroupName(p,a,b,c)
+#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->fnSetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
+#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->lpVtbl->fnSetSessionDesc(p,a,b)
-#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
-#define IDirectPlay3_Close(p) (p)->lpVtbl->Close(p)
-#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
-#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
-#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
-#define IDirectPlay3_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
-#define IDirectPlay3_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
-#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
-#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
-#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
-#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
-#define IDirectPlay3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
-#define IDirectPlay3_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
-#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d)
-#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c)
-#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
-#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
-#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
-#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c)
-#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b)
-#define IDirectPlay3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
-#define IDirectPlay3_Open(p,a,b) (p)->lpVtbl->Open(p,a,b)
-#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
-#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
-#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d)
-#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c)
-#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
-#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
-#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b)
+#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
+#define IDirectPlay3_Close(p) (p)->lpVtbl->fnClose(p)
+#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->fnCreateGroup(p,a,b,c,d,e)
+#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
+#define IDirectPlay3_DestroyGroup(p,a) (p)->lpVtbl->fnDestroyGroup(p,a)
+#define IDirectPlay3_DestroyPlayer(p,a) (p)->lpVtbl->fnDestroyPlayer(p,a)
+#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
+#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
+#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
+#define IDirectPlay3_GetCaps(p,a,b) (p)->lpVtbl->fnGetCaps(p,a,b)
+#define IDirectPlay3_GetMessageCount(p,a,b) (p)->lpVtbl->fnGetMessageCount(p,a,b)
+#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->lpVtbl->fnGetGroupData(p,a,b,c,d)
+#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->lpVtbl->fnGetGroupName(p,a,b,c)
+#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->fnGetPlayerAddress(p,a,b,c)
+#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->fnGetPlayerCaps(p,a,b,c)
+#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->fnGetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->lpVtbl->fnGetPlayerName(p,a,b,c)
+#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->lpVtbl->fnGetSessionDesc(p,a,b)
+#define IDirectPlay3_Initialize(p,a) (p)->lpVtbl->fnInitialize(p,a)
+#define IDirectPlay3_Open(p,a,b) (p)->lpVtbl->fnOpen(p,a,b)
+#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
+#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->lpVtbl->fnSend(p,a,b,c,d,e)
+#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->lpVtbl->fnSetGroupData(p,a,b,c,d)
+#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->lpVtbl->fnSetGroupName(p,a,b,c)
+#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->fnSetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
+#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->lpVtbl->fnSetSessionDesc(p,a,b)
/* Direct Play 3 Interface. */
-#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b)
-#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
-#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
-#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d)
-#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
-#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
-#define IDirectPlay3_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b)
-#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d)
-#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
-#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
-#define IDirectPlay3_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b)
-#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b)
-#define IDirectPlay3_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b)
-#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
-#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b)
+#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->lpVtbl->fnAddGroupToGroup(p,a,b)
+#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreateGroupInGroup(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->fnDeleteGroupFromGroup(p,a,b)
+#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->lpVtbl->fnEnumConnections(p,a,b,c,d)
+#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->fnEnumGroupsInGroup(p,a,b,c,d,e)
+#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->fnGetGroupConnectionSettings(p,a,b,c,d)
+#define IDirectPlay3_InitializeConnection(p,a,b) (p)->lpVtbl->fnInitializeConnection(p,a,b)
+#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->lpVtbl->fnSecureOpen(p,a,b,c,d)
+#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->fnSendChatMessage(p,a,b,c,d)
+#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->fnSetGroupConnectionSettings(p,a,b,c)
+#define IDirectPlay3_StartSession(p,a,b) (p)->lpVtbl->fnStartSession(p,a,b)
+#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->lpVtbl->fnGetGroupFlags(p,a,b)
+#define IDirectPlay3_GetGroupParent(p,a,b) (p)->lpVtbl->fnGetGroupParent(p,a,b)
+#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->fnGetPlayerAccount(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->lpVtbl->fnGetPlayerFlags(p,a,b)
/****************************************************************************
@@ -654,11 +654,11 @@
{
/* IUnknown Methods "Inherited Methods" */
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectPlayLobby Methods */
- STDMETHOD(Connect) (THIS_ DWORD, LPDIRECTPLAY *, IUnknown *) PURE;
+ STDMETHOD(Connect) (THIS_ DWORD, LPDIRECTPLAY2 *, IUnknown *) PURE;
STDMETHOD(CreateAddress) (THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
STDMETHOD(EnumAddress) (THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
STDMETHOD(EnumAddressTypes) (THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
@@ -679,11 +679,11 @@
{
/* IUnknown Methods "Inherited Methods" */
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectPlayLobby Methods */
- STDMETHOD(Connect) (THIS_ DWORD, LPDIRECTPLAY2 *, IUnknown *) PURE;
+ STDMETHOD(Connect) (THIS_ DWORD, LPDIRECTPLAY2 *, IUnknown *) PURE;
STDMETHOD(CreateAddress) (THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
STDMETHOD(EnumAddress) (THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
STDMETHOD(EnumAddressTypes) (THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
@@ -709,44 +709,44 @@
/* COM Interface */
-#define IDirectPlayLobby_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectPlayLobby_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectPlayLobby_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlayLobby_QueryInterface(p,a,b) (p)->lpVtbl->fnQueryInterface(p,a,b)
+#define IDirectPlayLobby_AddRef(p) (p)->lpVtbl->fnAddRef(p)
+#define IDirectPlayLobby_Release(p) (p)->lpVtbl->fnRelease(p)
-#define IDirectPlayLobby2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectPlayLobby2_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectPlayLobby2_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlayLobby2_QueryInterface(p,a,b) (p)->lpVtbl->fnQueryInterface(p,a,b)
+#define IDirectPlayLobby2_AddRef(p) (p)->lpVtbl->fnAddRef(p)
+#define IDirectPlayLobby2_Release(p) (p)->lpVtbl->fnRelease(p)
/* Direct Play Lobby 1 */
-#define IDirectPlayLobby_Connect(p,a,b,c) (p)->lpVtbl->Connect(p,a,b,c)
-#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
-#define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d)
-#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d)
-#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->EnumLocalApplications(p,a,b,c)
-#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->GetConnectionSettings(p,a,b,c)
-#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e)
-#define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->lpVtbl->RunApplication(p,a,b,c,d)
-#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d)
-#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
-#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c)
+#define IDirectPlayLobby_Connect(p,a,b,c) (p)->lpVtbl->fnConnect(p,a,b,c)
+#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->lpVtbl->fnEnumAddress(p,a,b,c,d)
+#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->fnEnumAddressTypes(p,a,b,c,d)
+#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->fnEnumLocalApplications(p,a,b,c)
+#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->fnGetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->fnReceiveLobbyMessage(p,a,b,c,d,e)
+#define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->lpVtbl->fnRunApplication(p,a,b,c,d)
+#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->fnSendLobbyMessage(p,a,b,c,d)
+#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->fnSetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->fnSetLobbyMessageEvent(p,a,b,c)
-#define IDirectPlayLobby2_Connect(p,a,b,c) (p)->lpVtbl->Connect(p,a,b,c)
-#define IDirectPlayLobby2_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
-#define IDirectPlayLobby2_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d)
-#define IDirectPlayLobby2_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d)
-#define IDirectPlayLobby2_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->EnumLocalApplications(p,a,b,c)
-#define IDirectPlayLobby2_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->GetConnectionSettings(p,a,b,c)
-#define IDirectPlayLobby2_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e)
-#define IDirectPlayLobby2_RunApplication(p,a,b,c,d) (p)->lpVtbl->RunApplication(p,a,b,c,d)
-#define IDirectPlayLobby2_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d)
-#define IDirectPlayLobby2_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
-#define IDirectPlayLobby2_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c)
+#define IDirectPlayLobby2_Connect(p,a,b,c) (p)->lpVtbl->fnConnect(p,a,b,c)
+#define IDirectPlayLobby2_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlayLobby2_EnumAddress(p,a,b,c,d) (p)->lpVtbl->fnEnumAddress(p,a,b,c,d)
+#define IDirectPlayLobby2_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->fnEnumAddressTypes(p,a,b,c,d)
+#define IDirectPlayLobby2_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->fnEnumLocalApplications(p,a,b,c)
+#define IDirectPlayLobby2_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->fnGetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby2_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->fnReceiveLobbyMessage(p,a,b,c,d,e)
+#define IDirectPlayLobby2_RunApplication(p,a,b,c,d) (p)->lpVtbl->fnRunApplication(p,a,b,c,d)
+#define IDirectPlayLobby2_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->fnSendLobbyMessage(p,a,b,c,d)
+#define IDirectPlayLobby2_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->fnSetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby2_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->fnSetLobbyMessageEvent(p,a,b,c)
/* Direct Play Lobby 2 */
-#define IDirectPlayLobby2_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
+#define IDirectPlayLobby2_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->fnCreateCompoundAddress(p,a,b,c,d)
#pragma pack(4)
diff --git a/multimedia/dplay.c b/multimedia/dplay.c
index 61eccf2..e3a22d7 100644
--- a/multimedia/dplay.c
+++ b/multimedia/dplay.c
@@ -2,7 +2,7 @@
*
* Copyright 1998 - Peter Hunnisett
*
- * <presently under construction - contact hunnise@nortel.ca>
+ * <presently under construction - contact hunnise@nortelnetworks.com>
*
*/
#include "interfaces.h"
@@ -23,13 +23,23 @@
struct IDirectPlayLobby {
LPDIRECTPLAYLOBBY_VTABLE lpVtbl;
ULONG ref;
- LPDPLCONNECTION lpSession;
+ DWORD dwConnFlags;
+ DPSESSIONDESC2 sessionDesc;
+ DPNAME playerName;
+ GUID guidSP;
+ LPVOID lpAddress;
+ DWORD dwAddressSize;
};
struct IDirectPlayLobby2 {
LPDIRECTPLAYLOBBY2_VTABLE lpVtbl;
ULONG ref;
- LPDPLCONNECTION lpSession;
+ DWORD dwConnFlags;
+ DPSESSIONDESC2 lpSessionDesc;
+ DPNAME lpPlayerName;
+ GUID guidSP;
+ LPVOID lpAddress;
+ DWORD dwAddressSize;
};
@@ -39,6 +49,13 @@
static DIRECTPLAYLOBBY2_VTABLE directPlayLobby2AVT;
static DIRECTPLAYLOBBY2_VTABLE directPlayLobby2WVT;
+
+static DIRECTPLAY2_VTABLE directPlay2AVT;
+static DIRECTPLAY3_VTABLE directPlay3VT;
+
+
+
+
struct IDirectPlay2 {
LPDIRECTPLAY2_VTABLE lpVtbl;
ULONG ref;
@@ -49,136 +66,6 @@
ULONG ref;
};
-
-static DIRECTPLAY2_VTABLE directPlay2AVT;
-static DIRECTPLAY2_VTABLE directPlay2WVT;
-static DIRECTPLAY3_VTABLE directPlay3AVT;
-static DIRECTPLAY3_VTABLE directPlay3WVT;
-
-/* Routine to delete the entire DPLCONNECTION tree. Works for both unicode and ascii. */
-void deleteDPConnection( LPDPLCONNECTION* ptrToDelete )
-{
-
- /* This is most definitely wrong. We're not even keeping dwCurrentPlayers over this */
- LPDPLCONNECTION toDelete = *ptrToDelete;
-
- FIXME( dplay, "incomplete.\n" );
-
- if( !toDelete )
- return;
-
- /* Clear out DPSESSIONDESC2 */
- if( toDelete->lpSessionDesc )
- {
- if( toDelete->lpSessionDesc->sess.lpszSessionName )
- HeapFree( GetProcessHeap(), 0, toDelete->lpSessionDesc->sess.lpszSessionName );
-
- if( toDelete->lpSessionDesc->pass.lpszPassword )
- HeapFree( GetProcessHeap(), 0, toDelete->lpSessionDesc->pass.lpszPassword );
-
- if( toDelete->lpSessionDesc );
- HeapFree( GetProcessHeap(), 0, toDelete->lpSessionDesc );
- }
-
- /* Clear out LPDPNAME */
- if( toDelete->lpPlayerName )
- {
- if( toDelete->lpPlayerName->psn.lpszShortName )
- HeapFree( GetProcessHeap(), 0, toDelete->lpPlayerName->psn.lpszShortName );
-
- if( toDelete->lpPlayerName->pln.lpszLongName )
- HeapFree( GetProcessHeap(), 0, toDelete->lpPlayerName->pln.lpszLongName );
-
- if( toDelete->lpPlayerName )
- HeapFree( GetProcessHeap(), 0, toDelete->lpPlayerName );
- }
-
- /* Clear out lpAddress. TO DO...Once we actually copy it. */
-
- /* Clear out DPLCONNECTION */
- HeapFree( GetProcessHeap(), 0, toDelete );
-
- toDelete = NULL;
-}
-
-
-#if 0
-/* Routine which copies and allocates all the store required for the DPLCONNECTION struct. */
-void rebuildDPConnectionW( LPDPLCONNECTION dest, LPDPLCONNECTION src )
-{
-
- /* Need to delete everything that already exists first */
- FIXME( dplay, "function is incomplete.\n" );
-
- if( !src )
- {
- /* Nothing to copy...hmmm...*/
- ERR( dplay, "nothing to copy\n" );
- return;
- }
-
- /* Copy DPLCONNECTION struct. If dest isn't NULL then we have a DPLCONNECTION
- struct but that's it
- */
- if( dest == NULL )
- {
- dest = HeapAlloc( GetProcessHeap(), 0, sizeof( *src ) );
- }
- memcpy( dest, src, sizeof( *src ) );
-
- /* Copy LPDPSESSIONDESC2 struct */
- if( src->lpSessionDesc )
- {
- dest->lpSessionDesc = HeapAlloc( GetProcessHeap(), 0,
- sizeof( *(src->lpSessionDesc) ) );
-
- memcpy( dest->lpSessionDesc, src->lpSessionDesc,
- sizeof( *(src->lpSessionDesc) ) );
-
- if( src->lpSessionDesc )
- {
- /* Hmmm...do we have to assume the system heap? */
- dest->lpSessionDesc->sess.lpszSessionName = HEAP_strdupW( GetProcessHeap(), 0,
- src->lpSessionDesc->sess.lpszSessionName );
- }
-
- if( src->lpSessionDesc->pass.lpszPassword )
- {
- dest->lpSessionDesc->pass.lpszPassword = HEAP_strdupW( GetProcessHeap(), 0,
- src->lpSessionDesc->pass.lpszPassword );
- }
- dest->lpSessionDesc->dwReserved1 = src->lpSessionDesc->dwReserved2 = 0;
- }
-
- /* Copy DPNAME struct */
- if( src->lpPlayerName )
- {
- dest->lpPlayerName = HeapAlloc( GetProcessHeap(), 0, sizeof( *(src->lpPlayerName) ) );
- memcpy( dest->lpPlayerName, src->lpPlayerName, sizeof( *(src->lpPlayerName) ) );
-
- if( src->lpPlayerName->psn.lpszShortName )
- {
- dest->lpPlayerName->psn.lpszShortName = HEAP_strdupW( GetProcessHeap(), 0,
- src->lpPlayerName->psn.lpszShortName );
- }
-
- if( src->lpPlayerName->pln.lpszLongName )
- {
- dest->lpPlayerName->pln.lpszLongName = HEAP_strdupW( GetProcessHeap(), 0,
- src->lpPlayerName->pln.lpszLongName );
- }
- }
-
- /* Copy Address of Service Provider -TBD */
- if( src->lpAddress )
- {
- /* What do we do here? */
- }
-
-}
-
-#endif
-
/* Routine called when starting up the server thread */
DWORD DPLobby_Spawn_Server( LPVOID startData )
{
@@ -289,7 +176,8 @@
REFIID riid,
LPVOID* ppvObj )
{
- return DPERR_OUTOFMEMORY;
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
}
static HRESULT WINAPI IDirectPlayLobbyW_QueryInterface
@@ -297,14 +185,18 @@
REFIID riid,
LPVOID* ppvObj )
{
- return DPERR_OUTOFMEMORY;
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
}
+
static HRESULT WINAPI IDirectPlayLobby2A_QueryInterface
( LPDIRECTPLAYLOBBY2A this,
REFIID riid,
LPVOID* ppvObj )
{
+ TRACE( dplay, "(%p)->(%p,%p)\n", this, riid, ppvObj );
+
/* Compare riids. We know this object is a direct play lobby 2A object.
If we are asking about the same type of interface we're fine.
*/
@@ -385,29 +277,18 @@
* Simple procedure. Just increment the reference count to this
* structure and return the new reference count.
*/
-static ULONG WINAPI IDirectPlayLobbyA_AddRef
-( LPDIRECTPLAYLOBBYA this )
+static ULONG WINAPI IDirectPlayLobby2A_AddRef
+( LPDIRECTPLAYLOBBY2A this )
{
++(this->ref);
TRACE( dplay,"ref count now %lu\n", this->ref );
return (this->ref);
-}
-static ULONG WINAPI IDirectPlayLobbyW_AddRef
-( LPDIRECTPLAYLOBBY this )
-{
- return IDirectPlayLobbyA_AddRef( (LPDIRECTPLAYLOBBY) this );
-}
-
-static ULONG WINAPI IDirectPlayLobby2A_AddRef
-( LPDIRECTPLAYLOBBY2A this )
-{
- return IDirectPlayLobbyA_AddRef( (LPDIRECTPLAYLOBBY) this );
};
static ULONG WINAPI IDirectPlayLobby2W_AddRef
( LPDIRECTPLAYLOBBY2 this )
{
- return IDirectPlayLobbyA_AddRef( (LPDIRECTPLAYLOBBY) this );
+ return IDirectPlayLobby2A_AddRef( (LPDIRECTPLAYLOBBY2) this );
};
@@ -416,8 +297,8 @@
* If the object no longer has any reference counts, free up the associated
* memory.
*/
-static ULONG WINAPI IDirectPlayLobbyA_Release
-( LPDIRECTPLAYLOBBYA this )
+static ULONG WINAPI IDirectPlayLobby2A_Release
+( LPDIRECTPLAYLOBBY2A this )
{
TRACE( dplay, "ref count decremeneted from %lu\n", this->ref );
@@ -426,29 +307,21 @@
/* Deallocate if this is the last reference to the object */
if( !(this->ref) )
{
- deleteDPConnection( &(this->lpSession) );
+ FIXME( dplay, "memory leak\n" );
+ /* Implement memory deallocation */
+
HeapFree( GetProcessHeap(), 0, this );
- return S_OK;
+
+ return 0;
}
return this->ref;
-
-}
-static ULONG WINAPI IDirectPlayLobbyW_Release
-( LPDIRECTPLAYLOBBY this )
-{
- return IDirectPlayLobbyA_Release( (LPDIRECTPLAYLOBBYA) this );
-}
-static ULONG WINAPI IDirectPlayLobby2A_Release
-( LPDIRECTPLAYLOBBY2A this )
-{
- return IDirectPlayLobbyA_Release( (LPDIRECTPLAYLOBBYA) this );
};
static ULONG WINAPI IDirectPlayLobby2W_Release
( LPDIRECTPLAYLOBBY2 this )
{
- return IDirectPlayLobbyA_Release( (LPDIRECTPLAYLOBBYA) this );
+ return IDirectPlayLobby2A_Release( (LPDIRECTPLAYLOBBY2A) this );
};
@@ -460,50 +333,44 @@
* Returns a IDirectPlay interface.
*
*/
-static HRESULT WINAPI IDirectPlayLobbyA_Connect
-( LPDIRECTPLAYLOBBYA this,
+static HRESULT WINAPI IDirectPlayLobby2A_Connect
+( LPDIRECTPLAYLOBBY2A this,
DWORD dwFlags,
- LPDIRECTPLAY* lplpDP,
+ LPDIRECTPLAY2* lplpDP,
IUnknown* pUnk)
{
FIXME( dplay, ": dwFlags=%08lx %p %p stub\n", dwFlags, lplpDP, pUnk );
return DPERR_OUTOFMEMORY;
};
-static HRESULT WINAPI IDirectPlayLobby2A_Connect
-( LPDIRECTPLAYLOBBY2A this,
+static HRESULT WINAPI IDirectPlayLobby2W_Connect
+( LPDIRECTPLAYLOBBY2 this,
DWORD dwFlags,
- LPDIRECTPLAY* lplpDP,
+ LPDIRECTPLAY2* lplpDP,
IUnknown* pUnk)
{
- return IDirectPlayLobbyA_Connect( (LPDIRECTPLAYLOBBYA)this, dwFlags, lplpDP, pUnk );
-};
-
-static HRESULT WINAPI IDirectPlayLobbyW_Connect
-( LPDIRECTPLAYLOBBY this,
- DWORD dwFlags,
- LPDIRECTPLAY* lplpDP,
- IUnknown* pUnk)
-{
- LPDIRECTPLAY2A directPlay2A;
- LPDIRECTPLAY2 directPlay2W;
+ LPDIRECTPLAY2* directPlay2W;
HRESULT createRC;
FIXME( dplay, ": dwFlags=%08lx %p %p stub\n", dwFlags, lplpDP, pUnk );
-#if 0
-
- /* See dpbuild_4301.txt */
- /* Create the direct play 2 W interface */
- if( ( ( createRC = DirectPlayCreate( NULL, &directPlay2A, pUnk ) ) != DP_OK ) ||
- ( ( createRC = directPlay2A->lpVtbl->fnQueryInterface
- ( directPlay2A, IID_IDirectPlay2, &directPlay2W ) ) != DP_OK )
- )
+ if( dwFlags )
{
- ERR( dplay, "error creating Direct Play 2 (W) interface. Return Code = %d.\n", createRC );
- return createRC;
+ return DPERR_INVALIDPARAMS;
}
+ if( ( createRC = DirectPlayCreate( &IID_IDirectPlayLobby2, lplpDP, pUnk ) ) != DP_OK )
+ {
+ ERR( dplay, "error creating Direct Play 2 (W) interface. Return Code = %ld.\n", createRC );
+ return createRC;
+ }
+
+ /* This should invoke IDirectPlay3::InitializeConnection IDirectPlay3::Open */
+ directPlay2W = lplpDP;
+
+
+
+#if 0
/* All the stuff below this is WRONG! */
if( this->lpSession->dwFlags == DPLCONNECTION_CREATESESSION )
{
@@ -541,15 +408,6 @@
};
-static HRESULT WINAPI IDirectPlayLobby2W_Connect
-( LPDIRECTPLAYLOBBY2 this,
- DWORD dwFlags,
- LPDIRECTPLAY* lplpDP,
- IUnknown* pUnk)
-{
- return IDirectPlayLobbyW_Connect( (LPDIRECTPLAYLOBBY)this, dwFlags, lplpDP, pUnk );
-};
-
/********************************************************************
*
* Creates a DirectPlay Address, given a service provider-specific network
@@ -559,19 +417,6 @@
* interpret as a network address.
*
*/
-static HRESULT WINAPI IDirectPlayLobbyA_CreateAddress
-( LPDIRECTPLAYLOBBY this,
- REFGUID guidSP,
- REFGUID guidDataType,
- LPCVOID lpData,
- DWORD dwDataSize,
- LPVOID lpAddress,
- LPDWORD lpdwAddressSize )
-{
- FIXME( dplay, ":stub\n");
- return DPERR_OUTOFMEMORY;
-};
-
static HRESULT WINAPI IDirectPlayLobby2A_CreateAddress
( LPDIRECTPLAYLOBBY2A this,
REFGUID guidSP,
@@ -581,24 +426,10 @@
LPVOID lpAddress,
LPDWORD lpdwAddressSize )
{
- return IDirectPlayLobbyA_CreateAddress( (LPDIRECTPLAYLOBBY)this, guidSP, guidDataType,
- lpData, dwDataSize, lpAddress, lpdwAddressSize );
-};
-
-static HRESULT WINAPI IDirectPlayLobbyW_CreateAddress
-( LPDIRECTPLAYLOBBY this,
- REFGUID guidSP,
- REFGUID guidDataType,
- LPCVOID lpData,
- DWORD dwDataSize,
- LPVOID lpAddress,
- LPDWORD lpdwAddressSize )
-{
FIXME( dplay, ":stub\n");
return DPERR_OUTOFMEMORY;
};
-
static HRESULT WINAPI IDirectPlayLobby2W_CreateAddress
( LPDIRECTPLAYLOBBY2 this,
REFGUID guidSP,
@@ -608,8 +439,8 @@
LPVOID lpAddress,
LPDWORD lpdwAddressSize )
{
- return IDirectPlayLobbyW_CreateAddress( (LPDIRECTPLAYLOBBY)this, guidSP, guidDataType,
- lpData, dwDataSize, lpAddress, lpdwAddressSize );
+ FIXME( dplay, ":stub\n");
+ return DPERR_OUTOFMEMORY;
};
@@ -619,30 +450,8 @@
* given callback function, with lpContext, for each of the chunks.
*
*/
-static HRESULT WINAPI IDirectPlayLobbyA_EnumAddress
-( LPDIRECTPLAYLOBBYA this,
- LPDPENUMADDRESSCALLBACK lpEnumAddressCallback,
- LPCVOID lpAddress,
- DWORD dwAddressSize,
- LPVOID lpContext )
-{
- FIXME( dplay, ":stub\n");
- return DPERR_OUTOFMEMORY;
-};
-
static HRESULT WINAPI IDirectPlayLobby2A_EnumAddress
( LPDIRECTPLAYLOBBY2A this,
- LPDPENUMADDRESSCALLBACK lpEnumAddressCallback,
- LPCVOID lpAddress,
- DWORD dwAddressSize,
- LPVOID lpContext )
-{
- return IDirectPlayLobbyA_EnumAddress( (LPDIRECTPLAYLOBBYA)this, lpEnumAddressCallback,
- lpAddress, dwAddressSize, lpContext );
-};
-
-static HRESULT WINAPI IDirectPlayLobbyW_EnumAddress
-( LPDIRECTPLAYLOBBY this,
LPDPENUMADDRESSCALLBACK lpEnumAddressCallback,
LPCVOID lpAddress,
DWORD dwAddressSize,
@@ -659,11 +468,10 @@
DWORD dwAddressSize,
LPVOID lpContext )
{
- return IDirectPlayLobbyW_EnumAddress( (LPDIRECTPLAYLOBBY)this, lpEnumAddressCallback,
- lpAddress, dwAddressSize, lpContext );
+ FIXME( dplay, ":stub\n");
+ return DPERR_OUTOFMEMORY;
};
-
/********************************************************************
*
* Enumerates all the address types that a given service provider needs to
@@ -692,8 +500,8 @@
guidSP, lpContext, dwFlags );
};
-static HRESULT WINAPI IDirectPlayLobbyW_EnumAddressTypes
-( LPDIRECTPLAYLOBBY this,
+static HRESULT WINAPI IDirectPlayLobby2W_EnumAddressTypes
+( LPDIRECTPLAYLOBBY2 this,
LPDPLENUMADDRESSTYPESCALLBACK lpEnumAddressTypeCallback,
REFGUID guidSP,
LPVOID lpContext,
@@ -703,18 +511,6 @@
return DPERR_OUTOFMEMORY;
};
-static HRESULT WINAPI IDirectPlayLobby2W_EnumAddressTypes
-( LPDIRECTPLAYLOBBY2 this,
- LPDPLENUMADDRESSTYPESCALLBACK lpEnumAddressTypeCallback,
- REFGUID guidSP,
- LPVOID lpContext,
- DWORD dwFlags )
-{
- return IDirectPlayLobbyW_EnumAddressTypes( (LPDIRECTPLAYLOBBY)this, lpEnumAddressTypeCallback,
- guidSP, lpContext, dwFlags );
-};
-
-
/********************************************************************
*
* Enumerates what applications are registered with DirectPlay by
@@ -778,7 +574,9 @@
LPVOID lpData,
LPDWORD lpdwDataSize )
{
- FIXME( dplay, ": semi stub %p %08lx %p %p \n", this, dwAppID, lpData, lpdwDataSize );
+ LPDPLCONNECTION lpDplConnection;
+
+ FIXME( dplay, ": semi stub (%p)->(0x%08lx,%p,%p)\n", this, dwAppID, lpData, lpdwDataSize );
/* Application is requesting us to give the required size */
if ( !lpData )
@@ -796,11 +594,62 @@
}
/* Fill in the fields - let them just use the ptrs */
- if( ((LPDPLCONNECTION)lpData)->lpSessionDesc )
+ lpDplConnection = (LPDPLCONNECTION)lpData;
+
+ /* Make sure we were given the right size */
+ if( lpDplConnection->dwSize < sizeof( DPLCONNECTION ) )
{
-
+ ERR( dplay, "bad passed size 0x%08lx.\n", lpDplConnection->dwSize );
+ return DPERR_INVALIDPARAMS;
}
- memcpy( lpData, this->lpSession, sizeof( *(this->lpSession) ) );
+
+ /* Copy everything we've got into here */
+ /* Need to actually store the stuff here. Check if we've already allocated each field first. */
+ lpDplConnection->dwFlags = this->dwConnFlags;
+
+ /* Copy LPDPSESSIONDESC2 struct */
+ lpDplConnection->lpSessionDesc = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( this->sessionDesc ) );
+ memcpy( lpDplConnection, &(this->sessionDesc), sizeof( this->sessionDesc ) );
+
+ if( this->sessionDesc.sess.lpszSessionName )
+ {
+ lpDplConnection->lpSessionDesc->sess.lpszSessionName =
+ HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, this->sessionDesc.sess.lpszSessionName );
+ }
+
+ if( this->sessionDesc.pass.lpszPassword )
+ {
+ lpDplConnection->lpSessionDesc->pass.lpszPassword =
+ HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, this->sessionDesc.pass.lpszPassword );
+ }
+
+ /* I don't know what to use the reserved for. We'll set it to 0 just for fun */
+ this->sessionDesc.dwReserved1 = this->sessionDesc.dwReserved2 = 0;
+
+ /* Copy DPNAME struct - seems to be optional - check for existance first */
+ lpDplConnection->lpPlayerName = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( this->playerName ) );
+ memcpy( lpDplConnection->lpPlayerName, &(this->playerName), sizeof( this->playerName ) );
+
+ if( this->playerName.psn.lpszShortName )
+ {
+ lpDplConnection->lpPlayerName->psn.lpszShortName =
+ HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, this->playerName.psn.lpszShortName );
+ }
+
+ if( this->playerName.pln.lpszLongName )
+ {
+ lpDplConnection->lpPlayerName->pln.lpszLongName =
+ HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, this->playerName.pln.lpszLongName );
+ }
+
+
+
+ memcpy( &(lpDplConnection->guidSP), &(this->guidSP), sizeof( this->guidSP ) );
+
+ lpDplConnection->lpAddress = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, this->dwAddressSize );
+ memcpy( lpDplConnection->lpAddress, this->lpAddress, this->dwAddressSize );
+
+ lpDplConnection->dwAddressSize = this->dwAddressSize;
return DP_OK;
}
@@ -839,7 +688,7 @@
}
/* Fill in the fields - let them just use the ptrs */
- memcpy( lpData, this->lpSession, sizeof( *(this->lpSession) ) );
+ FIXME( dplay, "stub\n" );
return DP_OK;
};
@@ -1025,7 +874,7 @@
DWORD dwAppID,
LPDPLCONNECTION lpConn )
{
- FIXME( dplay, ": this=%p, dwFlags=%08lx, dwAppId=%08lx, lpConn=%p: semi stub\n",
+ TRACE( dplay, ": this=%p, dwFlags=%08lx, dwAppId=%08lx, lpConn=%p\n",
this, dwFlags, dwAppID, lpConn );
/* Paramater check */
@@ -1066,9 +915,46 @@
return DPERR_INVALIDPARAMS;
}
- /* Need to actually store the stuff here */
+ /* Need to actually store the stuff here. Check if we've already allocated each field first. */
+ this->dwConnFlags = lpConn->dwFlags;
- return DPERR_OUTOFMEMORY;
+ /* Copy LPDPSESSIONDESC2 struct - this is required */
+ memcpy( &(this->sessionDesc), lpConn->lpSessionDesc, sizeof( *(lpConn->lpSessionDesc) ) );
+
+ if( lpConn->lpSessionDesc->sess.lpszSessionName )
+ this->sessionDesc.sess.lpszSessionName = HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, lpConn->lpSessionDesc->sess.lpszSessionName );
+ else
+ this->sessionDesc.sess.lpszSessionName = NULL;
+
+ if( lpConn->lpSessionDesc->pass.lpszPassword )
+ this->sessionDesc.pass.lpszPassword = HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, lpConn->lpSessionDesc->pass.lpszPassword );
+ else
+ this->sessionDesc.pass.lpszPassword = NULL;
+
+ /* I don't know what to use the reserved for ... */
+ this->sessionDesc.dwReserved1 = this->sessionDesc.dwReserved2 = 0;
+
+ /* Copy DPNAME struct - seems to be optional - check for existance first */
+ if( lpConn->lpPlayerName )
+ {
+ memcpy( &(this->playerName), lpConn->lpPlayerName, sizeof( *lpConn->lpPlayerName ) );
+
+ if( lpConn->lpPlayerName->psn.lpszShortName )
+ this->playerName.psn.lpszShortName = HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, lpConn->lpPlayerName->psn.lpszShortName );
+
+ if( lpConn->lpPlayerName->pln.lpszLongName )
+ this->playerName.pln.lpszLongName = HEAP_strdupW( GetProcessHeap(), HEAP_ZERO_MEMORY, lpConn->lpPlayerName->pln.lpszLongName );
+
+ }
+
+ memcpy( &(this->guidSP), &(lpConn->guidSP), sizeof( lpConn->guidSP ) );
+
+ this->lpAddress = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, lpConn->dwAddressSize );
+ memcpy( this->lpAddress, lpConn->lpAddress, lpConn->dwAddressSize );
+
+ this->dwAddressSize = lpConn->dwAddressSize;
+
+ return DP_OK;
};
static HRESULT WINAPI IDirectPlayLobby2W_SetConnectionSettings
@@ -1177,39 +1063,40 @@
/* Direct Play Lobby 1 (ascii) Virtual Table for methods */
+/* All lobby 1 methods are exactly the same except QueryInterface */
static struct tagLPDIRECTPLAYLOBBY_VTABLE directPlayLobbyAVT = {
IDirectPlayLobbyA_QueryInterface,
- IDirectPlayLobbyA_AddRef,
- IDirectPlayLobbyA_Release,
- IDirectPlayLobbyA_Connect,
- IDirectPlayLobbyA_CreateAddress,
- IDirectPlayLobbyA_EnumAddress,
- IDirectPlayLobbyA_EnumAddressTypes,
- IDirectPlayLobbyA_EnumLocalApplications,
- IDirectPlayLobbyA_GetConnectionSettings,
- IDirectPlayLobbyA_ReceiveLobbyMessage,
- IDirectPlayLobbyA_RunApplication,
- IDirectPlayLobbyA_SendLobbyMessage,
- IDirectPlayLobbyA_SetConnectionSettings,
- IDirectPlayLobbyA_SetLobbyMessageEvent
+ (void*)IDirectPlayLobby2A_AddRef,
+ (void*)IDirectPlayLobby2A_Release,
+ (void*)IDirectPlayLobby2A_Connect,
+ (void*)IDirectPlayLobby2A_CreateAddress,
+ (void*)IDirectPlayLobby2A_EnumAddress,
+ (void*)IDirectPlayLobby2A_EnumAddressTypes,
+ (void*)IDirectPlayLobby2A_EnumLocalApplications,
+ (void*)IDirectPlayLobby2A_GetConnectionSettings,
+ (void*)IDirectPlayLobby2A_ReceiveLobbyMessage,
+ (void*)IDirectPlayLobby2A_RunApplication,
+ (void*)IDirectPlayLobby2A_SendLobbyMessage,
+ (void*)IDirectPlayLobby2A_SetConnectionSettings,
+ (void*)IDirectPlayLobby2A_SetLobbyMessageEvent
};
/* Direct Play Lobby 1 (unicode) Virtual Table for methods */
static struct tagLPDIRECTPLAYLOBBY_VTABLE directPlayLobbyWVT = {
IDirectPlayLobbyW_QueryInterface,
- IDirectPlayLobbyW_AddRef,
- IDirectPlayLobbyW_Release,
- IDirectPlayLobbyW_Connect,
- IDirectPlayLobbyW_CreateAddress,
- IDirectPlayLobbyW_EnumAddress,
- IDirectPlayLobbyW_EnumAddressTypes,
- IDirectPlayLobbyW_EnumLocalApplications,
- IDirectPlayLobbyW_GetConnectionSettings,
- IDirectPlayLobbyW_ReceiveLobbyMessage,
- IDirectPlayLobbyW_RunApplication,
- IDirectPlayLobbyW_SendLobbyMessage,
- IDirectPlayLobbyW_SetConnectionSettings,
- IDirectPlayLobbyW_SetLobbyMessageEvent
+ (void*)IDirectPlayLobby2W_AddRef,
+ (void*)IDirectPlayLobby2W_Release,
+ (void*)IDirectPlayLobby2W_Connect,
+ (void*)IDirectPlayLobby2W_CreateAddress,
+ (void*)IDirectPlayLobby2W_EnumAddress,
+ (void*)IDirectPlayLobby2W_EnumAddressTypes,
+ (void*)IDirectPlayLobby2W_EnumLocalApplications,
+ (void*)IDirectPlayLobby2W_GetConnectionSettings,
+ (void*)IDirectPlayLobby2W_ReceiveLobbyMessage,
+ (void*)IDirectPlayLobby2W_RunApplication,
+ (void*)IDirectPlayLobby2W_SendLobbyMessage,
+ (void*)IDirectPlayLobby2W_SetConnectionSettings,
+ (void*)IDirectPlayLobby2W_SetLobbyMessageEvent
};
@@ -1273,7 +1160,7 @@
return DPERR_INVALIDPARAMS;
}
- /* Yes...really we should bre returning a lobby 1 object */
+ /* Yes...really we should be returning a lobby 1 object */
*lplpDPL = (LPDIRECTPLAYLOBBYA)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof( IDirectPlayLobbyA ) );
@@ -1285,14 +1172,7 @@
(*lplpDPL)->lpVtbl = &directPlayLobbyAVT;
(*lplpDPL)->ref = 1;
- (*lplpDPL)->lpSession = (LPDPLCONNECTION)HeapAlloc( GetProcessHeap(),
- HEAP_ZERO_MEMORY,
- sizeof( DPLCONNECTION ) );
- (*lplpDPL)->lpSession->dwSize = sizeof( DPLCONNECTION );
-
- (*lplpDPL)->lpSession->lpSessionDesc = (LPDPSESSIONDESC2)HeapAlloc(
- GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( DPSESSIONDESC2 ) );
- (*lplpDPL)->lpSession->lpSessionDesc->dwSize = sizeof( DPSESSIONDESC2 );
+ /* All fields were nulled out by the allocation */
return DP_OK;
}
@@ -1332,14 +1212,7 @@
(*lplpDPL)->lpVtbl = &directPlayLobbyWVT;
(*lplpDPL)->ref = 1;
-
- (*lplpDPL)->lpSession = (LPDPLCONNECTION)HeapAlloc( GetProcessHeap(),
- HEAP_ZERO_MEMORY,
- sizeof( DPLCONNECTION ) );
- (*lplpDPL)->lpSession->dwSize = sizeof( DPLCONNECTION );
- (*lplpDPL)->lpSession->lpSessionDesc = (LPDPSESSIONDESC2)HeapAlloc(
- GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( DPSESSIONDESC2 ) );
- (*lplpDPL)->lpSession->lpSessionDesc->dwSize = sizeof( DPSESSIONDESC2 );
+ /* All fields were nulled out by the allocation */
return DP_OK;
@@ -1482,9 +1355,6 @@
( LPGUID lpGUID, LPDIRECTPLAY2 *lplpDP, IUnknown *pUnk)
{
- FIXME( dplay, ":stub\n");
- return DPERR_OUTOFMEMORY;
-
TRACE(dplay,"\n" );
if( pUnk != NULL )
@@ -1494,8 +1364,8 @@
return DPERR_OUTOFMEMORY;
}
- *lplpDP = (LPDIRECTPLAY)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
- sizeof( **lplpDP ) );
+ *lplpDP = (LPDIRECTPLAY2)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof( **lplpDP ) );
if( !*lplpDP )
{
@@ -1509,3 +1379,548 @@
};
+
+/* Direct Play methods */
+static HRESULT WINAPI DirectPlay2W_QueryInterface
+ ( LPDIRECTPLAY2 this, REFIID riid, LPVOID* ppvObj )
+{
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI DirectPlay2A_QueryInterface
+ ( LPDIRECTPLAY2A this, REFIID riid, LPVOID* ppvObj )
+{
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI DirectPlay3W_QueryInterface
+ ( LPDIRECTPLAY3 this, REFIID riid, LPVOID* ppvObj )
+{
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI DirectPlay3A_QueryInterface
+ ( LPDIRECTPLAY3A this, REFIID riid, LPVOID* ppvObj )
+{
+ FIXME( dplay, "(%p)->(%p,%p): stub\n", this, riid, ppvObj );
+ return E_NOINTERFACE;
+}
+
+
+static ULONG WINAPI DirectPlay3W_AddRef
+ ( LPDIRECTPLAY3 this )
+{
+ ++(this->ref);
+ TRACE( dplay,"ref count now %lu\n", this->ref );
+ return (this->ref);
+}
+
+static ULONG WINAPI DirectPlay3W_Release
+( LPDIRECTPLAY3 this )
+{
+ TRACE( dplay, "ref count decremeneted from %lu\n", this->ref );
+
+ this->ref--;
+
+ /* Deallocate if this is the last reference to the object */
+ if( !(this->ref) )
+ {
+ FIXME( dplay, "memory leak\n" );
+ /* Implement memory deallocation */
+
+ HeapFree( GetProcessHeap(), 0, this );
+
+ return 0;
+ }
+
+ return this->ref;
+};
+
+
+
+
+HRESULT WINAPI DirectPlay3W_AddPlayerToGroup
+ ( LPDIRECTPLAY3 this, DPID a, DPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_Close
+ ( LPDIRECTPLAY3 this )
+{
+ FIXME( dplay,"(%p)->(): stub", this );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_CreateGroup
+ ( LPDIRECTPLAY3 this, LPDPID a, LPDPNAME b, LPVOID c, DWORD d, DWORD e )
+{
+ FIXME( dplay,"(%p)->(%p,%p,%p,0x%08lx,0x%08lx): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_CreatePlayer
+ ( LPDIRECTPLAY3 this, LPDPID a, LPDPNAME b, HANDLE32 c, LPVOID d, DWORD e, DWORD f )
+{
+ FIXME( dplay,"(%p)->(%p,%p,%d,%p,0x%08lx,0x%08lx): stub", this, a, b, c, d, e, f );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_DeletePlayerFromGroup
+ ( LPDIRECTPLAY3 this, DPID a, DPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_DestroyGroup
+ ( LPDIRECTPLAY3 this, DPID a )
+{
+ FIXME( dplay,"(%p)->(0x%08lx): stub", this, a );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_DestroyPlayer
+ ( LPDIRECTPLAY3 this, DPID a )
+{
+ FIXME( dplay,"(%p)->(0x%08lx): stub", this, a );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumGroupPlayers
+ ( LPDIRECTPLAY3 this, DPID a, LPGUID b, LPDPENUMPLAYERSCALLBACK2 c,
+ LPVOID d, DWORD e )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p,%p,0x%08lx): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumGroups
+ ( LPDIRECTPLAY3 this, LPGUID a, LPDPENUMPLAYERSCALLBACK2 b, LPVOID c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(%p,%p,%p,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumPlayers
+ ( LPDIRECTPLAY3 this, LPGUID a, LPDPENUMPLAYERSCALLBACK2 b, LPVOID c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(%p,%p,%p,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumSessions
+ ( LPDIRECTPLAY3 this, LPDPSESSIONDESC2 a, DWORD b, LPDPENUMSESSIONSCALLBACK2 c,
+ LPVOID d, DWORD e )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx,%p,%p,0x%08lx): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetCaps
+ ( LPDIRECTPLAY3 this, LPDPCAPS a, DWORD b )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetGroupData
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, LPDWORD c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetGroupName
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, LPDWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetMessageCount
+ ( LPDIRECTPLAY3 this, DPID a, LPDWORD b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerAddress
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, LPDWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerCaps
+ ( LPDIRECTPLAY3 this, DPID a, LPDPCAPS b, DWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,0x%08lx): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerData
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, LPDWORD c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerName
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, LPDWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetSessionDesc
+ ( LPDIRECTPLAY3 this, LPVOID a, LPDWORD b )
+{
+ FIXME( dplay,"(%p)->(%p,%p): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_Initialize
+ ( LPDIRECTPLAY3 this, LPGUID a )
+{
+ FIXME( dplay,"(%p)->(%p): stub", this, a );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_Open
+ ( LPDIRECTPLAY3 this, LPDPSESSIONDESC2 a, DWORD b )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_Receive
+ ( LPDIRECTPLAY3 this, LPDPID a, LPDPID b, DWORD c, LPVOID d, LPDWORD e )
+{
+ FIXME( dplay,"(%p)->(%p,%p,0x%08lx,%p,%p): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_Send
+ ( LPDIRECTPLAY3 this, DPID a, DPID b, DWORD c, LPVOID d, DWORD e )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx,0x%08lx,%p,0x%08lx): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetGroupData
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, DWORD c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,0x%08lx,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetGroupName
+ ( LPDIRECTPLAY3 this, DPID a, LPDPNAME b, DWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,0x%08lx): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetPlayerData
+ ( LPDIRECTPLAY3 this, DPID a, LPVOID b, DWORD c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,0x%08lx,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetPlayerName
+ ( LPDIRECTPLAY3 this, DPID a, LPDPNAME b, DWORD c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,0x%08lx): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetSessionDesc
+ ( LPDIRECTPLAY3 this, LPDPSESSIONDESC2 a, DWORD b )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_AddGroupToGroup
+ ( LPDIRECTPLAY3 this, DPID a, DPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_CreateGroupInGroup
+ ( LPDIRECTPLAY3 this, DPID a, LPDPID b, LPDPNAME c, LPVOID d, DWORD e, DWORD f )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p,%p,0x%08lx,0x%08lx): stub", this, a, b, c, d, e, f );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_DeleteGroupFromGroup
+ ( LPDIRECTPLAY3 this, DPID a, DPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumConnections
+ ( LPDIRECTPLAY3 this, LPCGUID a, LPDPENUMCONNECTIONSCALLBACK b, LPVOID c, DWORD d )
+{
+ FIXME( dplay,"(%p)->(%p,%p,%p,0x%08lx): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_EnumGroupsInGroup
+ ( LPDIRECTPLAY3 this, DPID a, LPGUID b, LPDPENUMPLAYERSCALLBACK2 c, LPVOID d, DWORD e )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p,%p,%p,0x%08lx): stub", this, a, b, c, d, e );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetGroupConnectionSettings
+ ( LPDIRECTPLAY3 this, DWORD a, DPID b, LPVOID c, LPDWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx,%p,%p): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_InitializeConnection
+ ( LPDIRECTPLAY3 this, LPVOID a, DWORD b )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SecureOpen
+ ( LPDIRECTPLAY3 this, LPCDPSESSIONDESC2 a, DWORD b, LPCDPSECURITYDESC c, LPCDPCREDENTIALS d )
+{
+ FIXME( dplay,"(%p)->(%p,0x%08lx,%p,%p): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SendChatMessage
+ ( LPDIRECTPLAY3 this, DPID a, DPID b, DWORD c, LPDPCHAT d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx,0x%08lx,%p): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_SetGroupConnectionSettings
+ ( LPDIRECTPLAY3 this, DWORD a, DPID b, LPDPLCONNECTION c )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx,%p): stub", this, a, b, c );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_StartSession
+ ( LPDIRECTPLAY3 this, DWORD a, DPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetGroupFlags
+ ( LPDIRECTPLAY3 this, DPID a, LPDWORD b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetGroupParent
+ ( LPDIRECTPLAY3 this, DPID a, LPDPID b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p): stub", this, a, b );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerAccount
+ ( LPDIRECTPLAY3 this, DPID a, DWORD b, LPVOID c, LPDWORD d )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,0x%08lx,%p,%p): stub", this, a, b, c, d );
+ return DP_OK;
+}
+
+HRESULT WINAPI DirectPlay3W_GetPlayerFlags
+ ( LPDIRECTPLAY3 this, DPID a, LPDWORD b )
+{
+ FIXME( dplay,"(%p)->(0x%08lx,%p): stub", this, a, b );
+ return DP_OK;
+}
+
+static struct tagLPDIRECTPLAY2_VTABLE directPlay2WVT = {
+ DirectPlay2W_QueryInterface,
+ (void*)DirectPlay3W_AddRef,
+ (void*)DirectPlay3W_Release,
+ (void*)DirectPlay3W_AddPlayerToGroup,
+ (void*)DirectPlay3W_Close,
+ (void*)DirectPlay3W_CreateGroup,
+ (void*)DirectPlay3W_CreatePlayer,
+ (void*)DirectPlay3W_DeletePlayerFromGroup,
+ (void*)DirectPlay3W_DestroyGroup,
+ (void*)DirectPlay3W_DestroyPlayer,
+ (void*)DirectPlay3W_EnumGroupPlayers,
+ (void*)DirectPlay3W_EnumGroups,
+ (void*)DirectPlay3W_EnumPlayers,
+ (void*)DirectPlay3W_EnumSessions,
+ (void*)DirectPlay3W_GetCaps,
+ (void*)DirectPlay3W_GetGroupData,
+ (void*)DirectPlay3W_GetGroupName,
+ (void*)DirectPlay3W_GetMessageCount,
+ (void*)DirectPlay3W_GetPlayerAddress,
+ (void*)DirectPlay3W_GetPlayerCaps,
+ (void*)DirectPlay3W_GetPlayerData,
+ (void*)DirectPlay3W_GetPlayerName,
+ (void*)DirectPlay3W_GetSessionDesc,
+ (void*)DirectPlay3W_Initialize,
+ (void*)DirectPlay3W_Open,
+ (void*)DirectPlay3W_Receive,
+ (void*)DirectPlay3W_Send,
+ (void*)DirectPlay3W_SetGroupData,
+ (void*)DirectPlay3W_SetGroupName,
+ (void*)DirectPlay3W_SetPlayerData,
+ (void*)DirectPlay3W_SetPlayerName,
+ (void*)DirectPlay3W_SetSessionDesc
+};
+
+static struct tagLPDIRECTPLAY2_VTABLE directPlay2AVT = {
+ DirectPlay2A_QueryInterface,
+ (void*)DirectPlay3W_AddRef,
+ (void*)DirectPlay3W_Release,
+ (void*)DirectPlay3W_AddPlayerToGroup,
+ (void*)DirectPlay3W_Close,
+ (void*)DirectPlay3W_CreateGroup,
+ (void*)DirectPlay3W_CreatePlayer,
+ (void*)DirectPlay3W_DeletePlayerFromGroup,
+ (void*)DirectPlay3W_DestroyGroup,
+ (void*)DirectPlay3W_DestroyPlayer,
+ (void*)DirectPlay3W_EnumGroupPlayers,
+ (void*)DirectPlay3W_EnumGroups,
+ (void*)DirectPlay3W_EnumPlayers,
+ (void*)DirectPlay3W_EnumSessions,
+ (void*)DirectPlay3W_GetCaps,
+ (void*)DirectPlay3W_GetGroupData,
+ (void*)DirectPlay3W_GetGroupName,
+ (void*)DirectPlay3W_GetMessageCount,
+ (void*)DirectPlay3W_GetPlayerAddress,
+ (void*)DirectPlay3W_GetPlayerCaps,
+ (void*)DirectPlay3W_GetPlayerData,
+ (void*)DirectPlay3W_GetPlayerName,
+ (void*)DirectPlay3W_GetSessionDesc,
+ (void*)DirectPlay3W_Initialize,
+ (void*)DirectPlay3W_Open,
+ (void*)DirectPlay3W_Receive,
+ (void*)DirectPlay3W_Send,
+ (void*)DirectPlay3W_SetGroupData,
+ (void*)DirectPlay3W_SetGroupName,
+ (void*)DirectPlay3W_SetPlayerData,
+ (void*)DirectPlay3W_SetPlayerName,
+ (void*)DirectPlay3W_SetSessionDesc
+};
+
+static struct tagLPDIRECTPLAY3_VTABLE directPlay3AVT = {
+ DirectPlay3A_QueryInterface,
+ (void*)DirectPlay3W_AddRef,
+ (void*)DirectPlay3W_Release,
+ (void*)DirectPlay3W_AddPlayerToGroup,
+ (void*)DirectPlay3W_Close,
+ (void*)DirectPlay3W_CreateGroup,
+ (void*)DirectPlay3W_CreatePlayer,
+ (void*)DirectPlay3W_DeletePlayerFromGroup,
+ (void*)DirectPlay3W_DestroyGroup,
+ (void*)DirectPlay3W_DestroyPlayer,
+ (void*)DirectPlay3W_EnumGroupPlayers,
+ (void*)DirectPlay3W_EnumGroups,
+ (void*)DirectPlay3W_EnumPlayers,
+ (void*)DirectPlay3W_EnumSessions,
+ (void*)DirectPlay3W_GetCaps,
+ (void*)DirectPlay3W_GetGroupData,
+ (void*)DirectPlay3W_GetGroupName,
+ (void*)DirectPlay3W_GetMessageCount,
+ (void*)DirectPlay3W_GetPlayerAddress,
+ (void*)DirectPlay3W_GetPlayerCaps,
+ (void*)DirectPlay3W_GetPlayerData,
+ (void*)DirectPlay3W_GetPlayerName,
+ (void*)DirectPlay3W_GetSessionDesc,
+ (void*)DirectPlay3W_Initialize,
+ (void*)DirectPlay3W_Open,
+ (void*)DirectPlay3W_Receive,
+ (void*)DirectPlay3W_Send,
+ (void*)DirectPlay3W_SetGroupData,
+ (void*)DirectPlay3W_SetGroupName,
+ (void*)DirectPlay3W_SetPlayerData,
+ (void*)DirectPlay3W_SetPlayerName,
+ (void*)DirectPlay3W_SetSessionDesc,
+
+ (void*)DirectPlay3W_AddGroupToGroup,
+ (void*)DirectPlay3W_CreateGroupInGroup,
+ (void*)DirectPlay3W_DeleteGroupFromGroup,
+ (void*)DirectPlay3W_EnumConnections,
+ (void*)DirectPlay3W_EnumGroupsInGroup,
+ (void*)DirectPlay3W_GetGroupConnectionSettings,
+ (void*)DirectPlay3W_InitializeConnection,
+ (void*)DirectPlay3W_SecureOpen,
+ (void*)DirectPlay3W_SendChatMessage,
+ (void*)DirectPlay3W_SetGroupConnectionSettings,
+ (void*)DirectPlay3W_StartSession,
+ (void*)DirectPlay3W_GetGroupFlags,
+ (void*)DirectPlay3W_GetGroupParent,
+ (void*)DirectPlay3W_GetPlayerAccount,
+ (void*)DirectPlay3W_GetPlayerFlags
+};
+
+static struct tagLPDIRECTPLAY3_VTABLE directPlay3WVT = {
+ DirectPlay3W_QueryInterface,
+ DirectPlay3W_AddRef,
+ DirectPlay3W_Release,
+ DirectPlay3W_AddPlayerToGroup,
+ DirectPlay3W_Close,
+ DirectPlay3W_CreateGroup,
+ DirectPlay3W_CreatePlayer,
+ DirectPlay3W_DeletePlayerFromGroup,
+ DirectPlay3W_DestroyGroup,
+ DirectPlay3W_DestroyPlayer,
+ DirectPlay3W_EnumGroupPlayers,
+ DirectPlay3W_EnumGroups,
+ DirectPlay3W_EnumPlayers,
+ DirectPlay3W_EnumSessions,
+ DirectPlay3W_GetCaps,
+ DirectPlay3W_GetGroupData,
+ DirectPlay3W_GetGroupName,
+ DirectPlay3W_GetMessageCount,
+ DirectPlay3W_GetPlayerAddress,
+ DirectPlay3W_GetPlayerCaps,
+ DirectPlay3W_GetPlayerData,
+ DirectPlay3W_GetPlayerName,
+ DirectPlay3W_GetSessionDesc,
+ DirectPlay3W_Initialize,
+ DirectPlay3W_Open,
+ DirectPlay3W_Receive,
+ DirectPlay3W_Send,
+ DirectPlay3W_SetGroupData,
+ DirectPlay3W_SetGroupName,
+ DirectPlay3W_SetPlayerData,
+ DirectPlay3W_SetPlayerName,
+ DirectPlay3W_SetSessionDesc,
+
+ DirectPlay3W_AddGroupToGroup,
+ DirectPlay3W_CreateGroupInGroup,
+ DirectPlay3W_DeleteGroupFromGroup,
+ DirectPlay3W_EnumConnections,
+ DirectPlay3W_EnumGroupsInGroup,
+ DirectPlay3W_GetGroupConnectionSettings,
+ DirectPlay3W_InitializeConnection,
+ DirectPlay3W_SecureOpen,
+ DirectPlay3W_SendChatMessage,
+ DirectPlay3W_SetGroupConnectionSettings,
+ DirectPlay3W_StartSession,
+ DirectPlay3W_GetGroupFlags,
+ DirectPlay3W_GetGroupParent,
+ DirectPlay3W_GetPlayerAccount,
+ DirectPlay3W_GetPlayerFlags
+};
+