Optimized include/*.h: (recursively) include all headers needed by
[wine] / include / dplay.h
1 /* Header for Direct Play and Direct Play Lobby */
2 #ifndef __WINE_DPLAY_H
3 #define __WINE_DPLAY_H
4
5 #include "unknwn.h"
6
7 #pragma pack(1)
8
9 /* Return Values for Direct Play */
10 #define _FACDP  0x877
11 #define MAKE_DPHRESULT( code )    MAKE_HRESULT( 1, _FACDP, code )
12
13 #define DP_OK                           S_OK
14 #define DPERR_ALREADYINITIALIZED        MAKE_DPHRESULT(   5 )
15 #define DPERR_ACCESSDENIED              MAKE_DPHRESULT(  10 )
16 #define DPERR_ACTIVEPLAYERS             MAKE_DPHRESULT(  20 )
17 #define DPERR_BUFFERTOOSMALL            MAKE_DPHRESULT(  30 )
18 #define DPERR_CANTADDPLAYER             MAKE_DPHRESULT(  40 )
19 #define DPERR_CANTCREATEGROUP           MAKE_DPHRESULT(  50 )
20 #define DPERR_CANTCREATEPLAYER          MAKE_DPHRESULT(  60 )
21 #define DPERR_CANTCREATESESSION         MAKE_DPHRESULT(  70 )
22 #define DPERR_CAPSNOTAVAILABLEYET       MAKE_DPHRESULT(  80 )
23 #define DPERR_EXCEPTION                 MAKE_DPHRESULT(  90 )
24 #define DPERR_GENERIC                   E_FAIL
25 #define DPERR_INVALIDFLAGS              MAKE_DPHRESULT( 120 )
26 #define DPERR_INVALIDOBJECT             MAKE_DPHRESULT( 130 )
27 #define DPERR_INVALIDPARAM              E_INVALIDARG
28 #define DPERR_INVALIDPARAMS             DPERR_INVALIDPARAM
29 #define DPERR_INVALIDPLAYER             MAKE_DPHRESULT( 150 )
30 #define DPERR_INVALIDGROUP              MAKE_DPHRESULT( 155 )
31 #define DPERR_NOCAPS                    MAKE_DPHRESULT( 160 )
32 #define DPERR_NOCONNECTION              MAKE_DPHRESULT( 170 )
33 #define DPERR_NOMEMORY                  E_OUTOFMEMORY
34 #define DPERR_OUTOFMEMORY               DPERR_NOMEMORY
35 #define DPERR_NOMESSAGES                MAKE_DPHRESULT( 190 )
36 #define DPERR_NONAMESERVERFOUND         MAKE_DPHRESULT( 200 )
37 #define DPERR_NOPLAYERS                 MAKE_DPHRESULT( 210 )
38 #define DPERR_NOSESSIONS                MAKE_DPHRESULT( 220 )
39 #define DPERR_PENDING                   E_PENDING
40 #define DPERR_SENDTOOBIG                MAKE_DPHRESULT( 230 )
41 #define DPERR_TIMEOUT                   MAKE_DPHRESULT( 240 )
42 #define DPERR_UNAVAILABLE               MAKE_DPHRESULT( 250 )
43 #define DPERR_UNSUPPORTED               E_NOTIMPL
44 #define DPERR_BUSY                      MAKE_DPHRESULT( 270 )
45 #define DPERR_USERCANCEL                MAKE_DPHRESULT( 280 )
46 #define DPERR_NOINTERFACE               E_NOINTERFACE
47 #define DPERR_CANNOTCREATESERVER        MAKE_DPHRESULT( 290 )
48 #define DPERR_PLAYERLOST                MAKE_DPHRESULT( 300 )
49 #define DPERR_SESSIONLOST               MAKE_DPHRESULT( 310 )
50 #define DPERR_UNINITIALIZED             MAKE_DPHRESULT( 320 )
51 #define DPERR_NONEWPLAYERS              MAKE_DPHRESULT( 330 )
52 #define DPERR_INVALIDPASSWORD           MAKE_DPHRESULT( 340 )
53 #define DPERR_CONNECTING                MAKE_DPHRESULT( 350 )
54 #define DPERR_BUFFERTOOLARGE            MAKE_DPHRESULT( 1000 )
55 #define DPERR_CANTCREATEPROCESS         MAKE_DPHRESULT( 1010 )
56 #define DPERR_APPNOTSTARTED             MAKE_DPHRESULT( 1020 )
57 #define DPERR_INVALIDINTERFACE          MAKE_DPHRESULT( 1030 )
58 #define DPERR_NOSERVICEPROVIDER         MAKE_DPHRESULT( 1040 )
59 #define DPERR_UNKNOWNAPPLICATION        MAKE_DPHRESULT( 1050 )
60 #define DPERR_NOTLOBBIED                MAKE_DPHRESULT( 1070 )
61 #define DPERR_SERVICEPROVIDERLOADED     MAKE_DPHRESULT( 1080 )
62 #define DPERR_ALREADYREGISTERED         MAKE_DPHRESULT( 1090 )
63 #define DPERR_NOTREGISTERED             MAKE_DPHRESULT( 1100 )
64 #define DPERR_AUTHENTICATIONFAILED      MAKE_DPHRESULT(  2000 )
65 #define DPERR_CANTLOADSSPI              MAKE_DPHRESULT(  2010 )
66 #define DPERR_ENCRYPTIONFAILED          MAKE_DPHRESULT(  2020 )
67 #define DPERR_SIGNFAILED                MAKE_DPHRESULT(  2030 )
68 #define DPERR_CANTLOADSECURITYPACKAGE   MAKE_DPHRESULT(  2040 )
69 #define DPERR_ENCRYPTIONNOTSUPPORTED    MAKE_DPHRESULT(  2050 )
70 #define DPERR_CANTLOADCAPI              MAKE_DPHRESULT(  2060 )
71 #define DPERR_NOTLOGGEDIN               MAKE_DPHRESULT(  2070 )
72 #define DPERR_LOGONDENIED               MAKE_DPHRESULT(  2080 )
73
74 DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
75 DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
76
77 DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
78 DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
79
80 /* {D1EB6D20-8923-11d0-9D97-00A0C90A43CB} */
81 DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
82
83
84 /* {AF465C71-9588-11cf-A020-00AA006157AC} */
85 DEFINE_GUID(IID_IDirectPlayLobby, 0xaf465c71, 0x9588, 0x11cf, 0xa0, 0x20, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
86 /* {26C66A70-B367-11cf-A024-00AA006157AC} */
87 DEFINE_GUID(IID_IDirectPlayLobbyA, 0x26c66a70, 0xb367, 0x11cf, 0xa0, 0x24, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
88 /* {0194C220-A303-11d0-9C4F-00A0C905425E} */
89 DEFINE_GUID(IID_IDirectPlayLobby2, 0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
90 /* {1BB4AF80-A303-11d0-9C4F-00A0C905425E} */
91 DEFINE_GUID(IID_IDirectPlayLobby2A, 0x1bb4af80, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
92 /* {2FE8F810-B2A5-11d0-A787-0000F803ABFC} */
93 DEFINE_GUID(CLSID_DirectPlayLobby, 0x2fe8f810, 0xb2a5, 0x11d0, 0xa7, 0x87, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
94
95 /*
96  * GUIDS used by Service Providers shipped with DirectPlay
97  * Use these to identify Service Provider returned by EnumConnections
98  */
99
100 /* GUID for IPX service provider {685BC400-9D2C-11cf-A9CD-00AA006886E3} */
101 DEFINE_GUID(DPSPGUID_IPX, 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
102
103 /* GUID for TCP/IP service provider 36E95EE0-8577-11cf-960C-0080C7534E82 */
104 DEFINE_GUID(DPSPGUID_TCPIP, 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
105
106 /* GUID for Serial service provider {0F1D6860-88D9-11cf-9C4E-00A0C905425E} */
107 DEFINE_GUID(DPSPGUID_SERIAL, 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
108
109 /* GUID for Modem service provider {44EAA760-CB68-11cf-9C4E-00A0C905425E} */
110 DEFINE_GUID(DPSPGUID_MODEM, 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
111
112 typedef struct IDirectPlay IDirectPlay, *LPDIRECTPLAY;
113
114 /* Direct Play 2 */
115 typedef struct IDirectPlay2       IDirectPlay2, *LPDIRECTPLAY2;
116 typedef struct IDirectPlay2       IDirectPlay2A, *LPDIRECTPLAY2A;
117
118 /* Direct Play 3 */
119 typedef struct IDirectPlay3       IDirectPlay3, *LPDIRECTPLAY3;
120 typedef struct IDirectPlay3       IDirectPlay3A, *LPDIRECTPLAY3A;
121
122 /* DPID - DirectPlay player and group ID */
123 typedef DWORD DPID, *LPDPID;
124
125 /* DPID from whence originate messages - just an ID */
126 #define DPID_SYSMSG             0           /* DPID of system */
127 #define DPID_ALLPLAYERS         0           /* DPID of all players */
128 #define DPID_SERVERPLAYER       1           /* DPID of the server player */
129 #define DPID_UNKNOWN            0xFFFFFFFF  /* Player ID is unknown */
130
131 /*  DPCAPS -  Used to obtain the capabilities of a DirectPlay object */
132 typedef struct tagDPCAPS
133 {
134     DWORD dwSize;               /* Size of structure in bytes */
135     DWORD dwFlags;              
136     DWORD dwMaxBufferSize;      
137     DWORD dwMaxQueueSize;       /* Obsolete. */
138     DWORD dwMaxPlayers;         /* Maximum players/groups (local + remote) */
139     DWORD dwHundredBaud;        /* Bandwidth in 100 bits per second units;
140                                  * i.e. 24 is 2400, 96 is 9600, etc. 
141                                  */
142     DWORD dwLatency;            /* Estimated latency; 0 = unknown */
143     DWORD dwMaxLocalPlayers;    /* Maximum # of locally created players */
144     DWORD dwHeaderLength;       /* Maximum header length in bytes */
145     DWORD dwTimeout;            /* Service provider's suggested timeout value
146                                  * This is how long DirectPlay will wait for
147                                  * responses to system messages
148                                  */
149 } DPCAPS, *LPDPCAPS;
150
151 typedef struct tagDPNAME
152 {
153     DWORD   dwSize;             
154     DWORD   dwFlags;            /* Not used must be 0 */
155
156     union /*playerShortName */      /* Player's Handle? */
157     {                           
158         LPWSTR  lpszShortName;  
159         LPSTR   lpszShortNameA; 
160     }psn;
161
162     union /*playerLongName */       /* Player's formal/real name */
163     {                         
164         LPWSTR  lpszLongName;  
165         LPSTR   lpszLongNameA;  
166     }pln;
167
168 } DPNAME, *LPDPNAME;
169
170 #define DPLONGNAMELEN     52
171 #define DPSHORTNAMELEN    20
172 #define DPSESSIONNAMELEN  32
173 #define DPPASSWORDLEN     16
174 #define DPUSERRESERVED    16
175
176 typedef struct tagDPSESSIONDESC
177 {
178     DWORD   dwSize;
179     GUID    guidSession;
180     DWORD   dwSession;
181     DWORD   dwMaxPlayers;
182     DWORD   dwCurrentPlayers;
183     DWORD   dwFlags;
184     char    szSessionName[ DPSESSIONNAMELEN ];
185     char    szUserField[ DPUSERRESERVED ];
186     DWORD   dwReserved1;
187     char    szPassword[ DPPASSWORDLEN ];
188     DWORD   dwReserved2;
189     DWORD   dwUser1;
190     DWORD   dwUser2;
191     DWORD   dwUser3;
192     DWORD   dwUser4;
193 } DPSESSIONDESC, *LPDPSESSIONDESC;
194
195 typedef struct tagDPSESSIONDESC2
196 {
197     DWORD   dwSize;             
198     DWORD   dwFlags;           
199     GUID    guidInstance;      
200     GUID    guidApplication;   /* GUID of the DP application, GUID_NULL if
201                                 * all applications! */
202                                
203     DWORD   dwMaxPlayers;      
204     DWORD   dwCurrentPlayers;   /* (read only value) */
205
206     union  /* Session name */
207     {                             
208         LPWSTR  lpszSessionName;  
209         LPSTR   lpszSessionNameA; 
210     }sess;
211
212     union  /* Optional password */
213     {                           
214         LPWSTR  lpszPassword;   
215         LPSTR   lpszPasswordA;  
216     }pass;
217
218     DWORD   dwReserved1;       
219     DWORD   dwReserved2;
220
221     DWORD   dwUser1;        /* For use by the application */  
222     DWORD   dwUser2;
223     DWORD   dwUser3;
224     DWORD   dwUser4;
225 } DPSESSIONDESC2, *LPDPSESSIONDESC2;
226 typedef const DPSESSIONDESC2* LPCDPSESSIONDESC2;
227
228 #define DPOPEN_JOIN                     0x00000001
229 #define DPOPEN_CREATE                   0x00000002
230 #define DPOPEN_RETURNSTATUS             DPENUMSESSIONS_RETURNSTATUS
231
232 #define DPSESSION_NEWPLAYERSDISABLED    0x00000001
233 #define DPSESSION_MIGRATEHOST           0x00000004
234 #define DPSESSION_NOMESSAGEID           0x00000008
235 #define DPSESSION_JOINDISABLED          0x00000020
236 #define DPSESSION_KEEPALIVE             0x00000040
237 #define DPSESSION_NODATAMESSAGES        0x00000080
238 #define DPSESSION_SECURESERVER          0x00000100
239 #define DPSESSION_PRIVATE               0x00000200
240 #define DPSESSION_PASSWORDREQUIRED      0x00000400
241 #define DPSESSION_MULTICASTSERVER       0x00000800
242 #define DPSESSION_CLIENTSERVER          0x00001000
243
244 typedef struct tagDPLCONNECTION
245 {
246     DWORD               dwSize;          
247     DWORD               dwFlags;          
248     LPDPSESSIONDESC2    lpSessionDesc;  /* Ptr to session desc to use for connect */  
249     LPDPNAME            lpPlayerName;   /* Ptr to player name structure */
250     GUID                guidSP;         /* GUID of Service Provider to use */ 
251     LPVOID              lpAddress;      /* Ptr to Address of Service Provider to use */
252     DWORD               dwAddressSize;  /* Size of address data */
253 } DPLCONNECTION, *LPDPLCONNECTION;
254
255 /* DPLCONNECTION flags (for dwFlags) */
256 #define DPLCONNECTION_CREATESESSION DPOPEN_CREATE
257 #define DPLCONNECTION_JOINSESSION   DPOPEN_JOIN
258
259 typedef struct tagDPLAPPINFO
260 {
261     DWORD       dwSize;            
262     GUID        guidApplication;   
263
264     union appName
265     {
266         LPSTR   lpszAppNameA;      
267         LPWSTR  lpszAppName;
268     };
269
270 } DPLAPPINFO, *LPDPLAPPINFO;
271 typedef const DPLAPPINFO *LPCDPLAPPINFO;
272
273 typedef struct DPCOMPOUNDADDRESSELEMENT
274 {
275     GUID    guidDataType;
276     DWORD   dwDataSize;
277     LPVOID  lpData;
278 } DPCOMPOUNDADDRESSELEMENT, *LPDPCOMPOUNDADDRESSELEMENT;
279 typedef const DPCOMPOUNDADDRESSELEMENT *LPCDPCOMPOUNDADDRESSELEMENT;
280
281 typedef struct tagDPCHAT
282 {
283     DWORD               dwSize;
284     DWORD               dwFlags;
285     union
286     {                          /* Message string */
287         LPWSTR  lpszMessage;   /* Unicode */
288         LPSTR   lpszMessageA;  /* ANSI */
289     }msgstr;
290 } DPCHAT, *LPDPCHAT;
291
292 typedef struct tagDPSECURITYDESC
293 {
294     DWORD dwSize;                   /* Size of structure */
295     DWORD dwFlags;                  /* Not used. Must be zero. */
296     union
297     {                               /* SSPI provider name */
298         LPWSTR  lpszSSPIProvider;   /* Unicode */
299         LPSTR   lpszSSPIProviderA;  /* ANSI */
300     }sspi;
301     union
302     {                               /* CAPI provider name */
303         LPWSTR lpszCAPIProvider;    /* Unicode */
304         LPSTR  lpszCAPIProviderA;   /* ANSI */
305     }capi;
306     DWORD dwCAPIProviderType;       /* Crypto Service Provider type */
307     DWORD dwEncryptionAlgorithm;    /* Encryption Algorithm type */
308 } DPSECURITYDESC, *LPDPSECURITYDESC;
309
310 typedef const DPSECURITYDESC *LPCDPSECURITYDESC;
311
312 typedef struct tagDPCREDENTIALS
313 {
314     DWORD dwSize;               /* Size of structure */
315     DWORD dwFlags;              /* Not used. Must be zero. */
316     union
317     {                           /* User name of the account */
318         LPWSTR  lpszUsername;   /* Unicode */
319         LPSTR   lpszUsernameA;  /* ANSI */
320     }name;
321     union
322     {                           /* Password of the account */
323         LPWSTR  lpszPassword;   /* Unicode */
324         LPSTR   lpszPasswordA;  /* ANSI */
325     }pass;
326     union
327     {                           /* Domain name of the account */
328         LPWSTR  lpszDomain;     /* Unicode */
329         LPSTR   lpszDomainA;    /* ANSI */
330     }domain;
331 } DPCREDENTIALS, *LPDPCREDENTIALS;
332
333 typedef const DPCREDENTIALS *LPCDPCREDENTIALS;
334
335
336
337 typedef BOOL32 (CALLBACK* LPDPENUMDPCALLBACKW)(
338     LPGUID      lpguidSP,
339     LPWSTR      lpSPName,
340     DWORD       dwMajorVersion,
341     DWORD       dwMinorVersion,
342     LPVOID      lpContext);
343
344 typedef BOOL32 (CALLBACK* LPDPENUMDPCALLBACKA)(
345     LPGUID      lpguidSP,
346     LPSTR       lpSPName,       /* ptr to str w/ driver description */
347     DWORD       dwMajorVersion, /* Major # of driver spec in lpguidSP */
348     DWORD       dwMinorVersion, /* Minor # of driver spec in lpguidSP */ 
349     LPVOID      lpContext);     /* User given */
350
351 typedef const GUID   *LPCGUID;
352 typedef const DPNAME *LPCDPNAME;
353
354 typedef BOOL32 (CALLBACK* LPDPENUMCONNECTIONSCALLBACK)(
355     LPCGUID     lpguidSP,
356     LPVOID      lpConnection,
357     DWORD       dwConnectionSize,
358     LPCDPNAME   lpName,
359     DWORD       dwFlags,
360     LPVOID      lpContext);
361
362 typedef BOOL32 (CALLBACK* LPDPENUMSESSIONSCALLBACK)(
363     LPDPSESSIONDESC lpDPSessionDesc,
364     LPVOID      lpContext,
365     LPDWORD     lpdwTimeOut,
366     DWORD       dwFlags);
367
368
369 extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID );
370 extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACKW, LPVOID );
371 extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY2 *lplpDP, IUnknown *pUnk);
372
373
374 /* Direct Play Lobby 1 */
375 typedef struct IDirectPlayLobby   IDirectPlayLobby, *LPDIRECTPLAYLOBBY;
376 typedef struct IDirectPlayLobby   IDirectPlayLobbyA, *LPDIRECTPLAYLOBBYA;
377
378 /* Direct Play Lobby 2 */
379 typedef struct IDirectPlayLobby2    IDirectPlayLobby2, *LPDIRECTPLAYLOBBY2;
380 typedef struct IDirectPlayLobby2    IDirectPlayLobby2A, *LPDIRECTPLAYLOBBY2A;
381
382 extern HRESULT WINAPI DirectPlayLobbyCreateW(LPGUID, LPDIRECTPLAYLOBBY *, IUnknown *, LPVOID, DWORD );
383 extern HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID, LPDIRECTPLAYLOBBYA *, IUnknown *, LPVOID, DWORD );
384
385
386
387 typedef BOOL32 (CALLBACK* LPDPENUMADDRESSCALLBACK)(
388     REFGUID         guidDataType,
389     DWORD           dwDataSize,
390     LPCVOID         lpData,
391     LPVOID          lpContext );
392
393 typedef BOOL32 (CALLBACK* LPDPLENUMADDRESSTYPESCALLBACK)(
394     REFGUID         guidDataType,
395     LPVOID          lpContext,
396     DWORD           dwFlags );
397
398 typedef BOOL32 (CALLBACK* LPDPLENUMLOCALAPPLICATIONSCALLBACK)(
399     LPCDPLAPPINFO   lpAppInfo,
400     LPVOID          lpContext,
401     DWORD           dwFlags );
402
403 typedef BOOL32 (CALLBACK* LPDPENUMPLAYERSCALLBACK2)(
404     DPID            dpId,
405     DWORD           dwPlayerType,
406     LPCDPNAME       lpName,
407     DWORD           dwFlags,
408     LPVOID          lpContext );
409
410 typedef BOOL32 (CALLBACK* LPDPENUMSESSIONSCALLBACK2)(
411     LPCDPSESSIONDESC2   lpThisSD,
412     LPDWORD             lpdwTimeOut,
413     DWORD               dwFlags,
414     LPVOID              lpContext );
415
416
417
418 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
419 #define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn)
420 #define PURE
421 #define FAR
422 #define THIS_ THIS,
423
424 #define THIS LPDIRECTPLAY2 this
425 typedef struct tagLPDIRECTPLAY2_VTABLE
426 {
427     /*** IUnknown methods ***/
428     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
429     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
430     STDMETHOD_(ULONG,Release)       (THIS) PURE;
431
432     /*** IDirectPlay2 methods ***/
433     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
434     STDMETHOD(Close)                (THIS) PURE;
435     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
436     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE32,LPVOID,DWORD,DWORD) PURE;
437     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
438     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
439     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
440     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
441     STDMETHOD(EnumGroups)           (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
442     STDMETHOD(EnumPlayers)          (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
443     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE;
444     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS,DWORD) PURE;
445     STDMETHOD(GetGroupData)         (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
446     STDMETHOD(GetGroupName)         (THIS_ DPID,LPVOID,LPDWORD) PURE;
447     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
448     STDMETHOD(GetPlayerAddress)     (THIS_ DPID,LPVOID,LPDWORD) PURE;
449     STDMETHOD(GetPlayerCaps)        (THIS_ DPID,LPDPCAPS,DWORD) PURE;
450     STDMETHOD(GetPlayerData)        (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
451     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPVOID,LPDWORD) PURE;
452     STDMETHOD(GetSessionDesc)       (THIS_ LPVOID,LPDWORD) PURE;
453     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
454     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
455     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
456     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
457     STDMETHOD(SetGroupData)         (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
458     STDMETHOD(SetGroupName)         (THIS_ DPID,LPDPNAME,DWORD) PURE;
459     STDMETHOD(SetPlayerData)        (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
460     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPDPNAME,DWORD) PURE;
461     STDMETHOD(SetSessionDesc)       (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
462 } DIRECTPLAY2_VTABLE, *LPDIRECTPLAY2_VTABLE;
463 #undef THIS
464
465 #define THIS LPDIRECTPLAY3 this
466 typedef struct tagLPDIRECTPLAY3_VTABLE
467 {
468     /*** IUnknown methods ***/
469     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
470     STDMETHOD_(ULONG,AddRef)        (THIS)  PURE;
471     STDMETHOD_(ULONG,Release)       (THIS) PURE;
472
473     /*** IDirectPlay2 methods ***/
474     STDMETHOD(AddPlayerToGroup)     (THIS_ DPID, DPID) PURE;
475     STDMETHOD(Close)                (THIS) PURE;
476     STDMETHOD(CreateGroup)          (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
477     STDMETHOD(CreatePlayer)         (THIS_ LPDPID,LPDPNAME,HANDLE32,LPVOID,DWORD,DWORD) PURE;
478     STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE;
479     STDMETHOD(DestroyGroup)         (THIS_ DPID) PURE;
480     STDMETHOD(DestroyPlayer)        (THIS_ DPID) PURE;
481     STDMETHOD(EnumGroupPlayers)     (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
482     STDMETHOD(EnumGroups)           (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
483     STDMETHOD(EnumPlayers)          (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
484     STDMETHOD(EnumSessions)         (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE;
485     STDMETHOD(GetCaps)              (THIS_ LPDPCAPS,DWORD) PURE;
486     STDMETHOD(GetGroupData)         (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
487     STDMETHOD(GetGroupName)         (THIS_ DPID,LPVOID,LPDWORD) PURE;
488     STDMETHOD(GetMessageCount)      (THIS_ DPID, LPDWORD) PURE;
489     STDMETHOD(GetPlayerAddress)     (THIS_ DPID,LPVOID,LPDWORD) PURE;
490     STDMETHOD(GetPlayerCaps)        (THIS_ DPID,LPDPCAPS,DWORD) PURE;
491     STDMETHOD(GetPlayerData)        (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE;
492     STDMETHOD(GetPlayerName)        (THIS_ DPID,LPVOID,LPDWORD) PURE;
493     STDMETHOD(GetSessionDesc)       (THIS_ LPVOID,LPDWORD) PURE;
494     STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;
495     STDMETHOD(Open)                 (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
496     STDMETHOD(Receive)              (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE;
497     STDMETHOD(Send)                 (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE;
498     STDMETHOD(SetGroupData)         (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
499     STDMETHOD(SetGroupName)         (THIS_ DPID,LPDPNAME,DWORD) PURE;
500     STDMETHOD(SetPlayerData)        (THIS_ DPID,LPVOID,DWORD,DWORD) PURE;
501     STDMETHOD(SetPlayerName)        (THIS_ DPID,LPDPNAME,DWORD) PURE;
502     STDMETHOD(SetSessionDesc)       (THIS_ LPDPSESSIONDESC2,DWORD) PURE;
503
504     /*** IDirectPlay3 methods ***/
505     STDMETHOD(AddGroupToGroup)            (THIS_ DPID, DPID) PURE;
506     STDMETHOD(CreateGroupInGroup)         (THIS_ DPID,LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE;
507     STDMETHOD(DeleteGroupFromGroup)       (THIS_ DPID,DPID) PURE;
508     STDMETHOD(EnumConnections)            (THIS_ LPCGUID,LPDPENUMCONNECTIONSCALLBACK,LPVOID,DWORD) PURE;
509     STDMETHOD(EnumGroupsInGroup)          (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE;
510     STDMETHOD(GetGroupConnectionSettings) (THIS_ DWORD, DPID, LPVOID, LPDWORD) PURE;
511     STDMETHOD(InitializeConnection)       (THIS_ LPVOID,DWORD) PURE;
512     STDMETHOD(SecureOpen)                 (THIS_ LPCDPSESSIONDESC2,DWORD,LPCDPSECURITYDESC,LPCDPCREDENTIALS) PURE;
513     STDMETHOD(SendChatMessage)            (THIS_ DPID,DPID,DWORD,LPDPCHAT);
514     STDMETHOD(SetGroupConnectionSettings) (THIS_ DWORD,DPID,LPDPLCONNECTION) PURE;
515     STDMETHOD(StartSession)               (THIS_ DWORD,DPID);
516     STDMETHOD(GetGroupFlags)              (THIS_ DPID,LPDWORD);
517     STDMETHOD(GetGroupParent)             (THIS_ DPID,LPDPID);
518     STDMETHOD(GetPlayerAccount)           (THIS_ DPID, DWORD, LPVOID, LPDWORD) PURE;
519     STDMETHOD(GetPlayerFlags)             (THIS_ DPID,LPDWORD);
520 } DIRECTPLAY3_VTABLE, *LPDIRECTPLAY3_VTABLE;
521 #undef THIS
522
523
524 /**********************************************************************************
525  *
526  * Macros for a nicer interface to DirectPlay 
527  *
528  **********************************************************************************/
529
530 /* COM Interface */
531 #define IDirectPlay_QueryInterface(p,a,b)           (p)->lpVtbl->fnQueryInterface(p,a,b)
532 #define IDirectPlay_AddRef(p)                       (p)->lpVtbl->fnAddRef(p)
533 #define IDirectPlay_Release(p)                      (p)->lpVtbl->fnRelease(p)
534
535 #define IDirectPlay2_QueryInterface(p,a,b)          (p)->lpVtbl->fnQueryInterface(p,a,b)
536 #define IDirectPlay2_AddRef(p)                      (p)->lpVtbl->fnAddRef(p)
537 #define IDirectPlay2_Release(p)                     (p)->lpVtbl->fnRelease(p)
538
539 #define IDirectPlay3_QueryInterface(p,a,b)          (p)->lpVtbl->fnQueryInterface(p,a,b)
540 #define IDirectPlay3_AddRef(p)                      (p)->lpVtbl->fnAddRef(p)
541 #define IDirectPlay3_Release(p)                     (p)->lpVtbl->fnRelease(p)
542
543 /* Direct Play 1&2 Interface */
544 #define IDirectPlay_AddPlayerToGroup(p,a,b)         (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
545 #define IDirectPlay_Close(p)                        (p)->lpVtbl->fnClose(p)
546 #define IDirectPlay_CreateGroup(p,a,b,c)            (p)->lpVtbl->fnCreateGroup(p,a,b,c)
547 #define IDirectPlay_CreatePlayer(p,a,b,c,d)         (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d)
548 #define IDirectPlay_DeletePlayerFromGroup(p,a,b)    (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
549 #define IDirectPlay_DestroyGroup(p,a)               (p)->lpVtbl->fnDestroyGroup(p,a)
550 #define IDirectPlay_DestroyPlayer(p,a)              (p)->lpVtbl->fnDestroyPlayer(p,a)
551 #define IDirectPlay_EnableNewPlayers(p,a)           (p)->lpVtbl->fnEnableNewPlayers(p,a)
552 #define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)     (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d)
553 #define IDirectPlay_EnumGroups(p,a,b,c,d)           (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
554 #define IDirectPlay_EnumPlayers(p,a,b,c,d)          (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
555 #define IDirectPlay_EnumSessions(p,a,b,c,d,e)       (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
556 #define IDirectPlay_GetCaps(p,a)                    (p)->lpVtbl->fnGetCaps(p,a)
557 #define IDirectPlay_GetMessageCount(p,a,b)          (p)->lpVtbl->fnGetMessageCount(p,a,b)
558 #define IDirectPlay_GetPlayerCaps(p,a,b)            (p)->lpVtbl->fnGetPlayerCaps(p,a,b)
559 #define IDirectPlay_GetPlayerName(p,a,b,c,d,e)      (p)->lpVtbl->fnGetPlayerName(p,a,b,c,d,e)
560 #define IDirectPlay_Initialize(p,a)                 (p)->lpVtbl->fnInitialize(p,a)
561 #define IDirectPlay_Open(p,a)                       (p)->lpVtbl->fnOpen(p,a)
562 #define IDirectPlay_Receive(p,a,b,c,d,e)            (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
563 #define IDirectPlay_SaveSession(p,a)                (p)->lpVtbl->fnSaveSession(p,a)
564 #define IDirectPlay_Send(p,a,b,c,d,e)               (p)->lpVtbl->fnSend(p,a,b,c,d,e)
565 #define IDirectPlay_SetPlayerName(p,a,b,c)          (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
566
567 #define IDirectPlay2_AddPlayerToGroup(p,a,b)        (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
568 #define IDirectPlay2_Close(p)                       (p)->lpVtbl->fnClose(p)
569 #define IDirectPlay2_CreateGroup(p,a,b,c,d,e)       (p)->lpVtbl->fnCreateGroup(p,a,b,c,d,e)
570 #define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)    (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d,e,f)
571 #define IDirectPlay2_DeletePlayerFromGroup(p,a,b)   (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
572 #define IDirectPlay2_DestroyGroup(p,a)              (p)->lpVtbl->fnDestroyGroup(p,a)
573 #define IDirectPlay2_DestroyPlayer(p,a)             (p)->lpVtbl->fnDestroyPlayer(p,a)
574 #define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e)  (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d,e)
575 #define IDirectPlay2_EnumGroups(p,a,b,c,d)          (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
576 #define IDirectPlay2_EnumPlayers(p,a,b,c,d)         (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
577 #define IDirectPlay2_EnumSessions(p,a,b,c,d,e)      (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
578 #define IDirectPlay2_GetCaps(p,a,b)                 (p)->lpVtbl->fnGetCaps(p,a,b)
579 #define IDirectPlay2_GetMessageCount(p,a,b)         (p)->lpVtbl->fnGetMessageCount(p,a,b)
580 #define IDirectPlay2_GetGroupData(p,a,b,c,d)        (p)->lpVtbl->fnGetGroupData(p,a,b,c,d)
581 #define IDirectPlay2_GetGroupName(p,a,b,c)          (p)->lpVtbl->fnGetGroupName(p,a,b,c)
582 #define IDirectPlay2_GetPlayerAddress(p,a,b,c)      (p)->lpVtbl->fnGetPlayerAddress(p,a,b,c)
583 #define IDirectPlay2_GetPlayerCaps(p,a,b,c)         (p)->lpVtbl->fnGetPlayerCaps(p,a,b,c)
584 #define IDirectPlay2_GetPlayerData(p,a,b,c,d)       (p)->lpVtbl->fnGetPlayerData(p,a,b,c,d)
585 #define IDirectPlay2_GetPlayerName(p,a,b,c)         (p)->lpVtbl->fnGetPlayerName(p,a,b,c)
586 #define IDirectPlay2_GetSessionDesc(p,a,b)          (p)->lpVtbl->fnGetSessionDesc(p,a,b)
587 #define IDirectPlay2_Initialize(p,a)                (p)->lpVtbl->fnInitialize(p,a)
588 #define IDirectPlay2_Open(p,a,b)                    (p)->lpVtbl->fnOpen(p,a,b)
589 #define IDirectPlay2_Receive(p,a,b,c,d,e)           (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
590 #define IDirectPlay2_Send(p,a,b,c,d,e)              (p)->lpVtbl->fnSend(p,a,b,c,d,e)
591 #define IDirectPlay2_SetGroupData(p,a,b,c,d)        (p)->lpVtbl->fnSetGroupData(p,a,b,c,d)
592 #define IDirectPlay2_SetGroupName(p,a,b,c)          (p)->lpVtbl->fnSetGroupName(p,a,b,c)
593 #define IDirectPlay2_SetPlayerData(p,a,b,c,d)       (p)->lpVtbl->fnSetPlayerData(p,a,b,c,d)
594 #define IDirectPlay2_SetPlayerName(p,a,b,c)         (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
595 #define IDirectPlay2_SetSessionDesc(p,a,b)          (p)->lpVtbl->fnSetSessionDesc(p,a,b)
596
597 #define IDirectPlay3_AddPlayerToGroup(p,a,b)        (p)->lpVtbl->fnAddPlayerToGroup(p,a,b)
598 #define IDirectPlay3_Close(p)                       (p)->lpVtbl->fnClose(p)
599 #define IDirectPlay3_CreateGroup(p,a,b,c,d,e)       (p)->lpVtbl->fnCreateGroup(p,a,b,c,d,e)
600 #define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)    (p)->lpVtbl->fnCreatePlayer(p,a,b,c,d,e,f)
601 #define IDirectPlay3_DeletePlayerFromGroup(p,a,b)   (p)->lpVtbl->fnDeletePlayerFromGroup(p,a,b)
602 #define IDirectPlay3_DestroyGroup(p,a)              (p)->lpVtbl->fnDestroyGroup(p,a)
603 #define IDirectPlay3_DestroyPlayer(p,a)             (p)->lpVtbl->fnDestroyPlayer(p,a)
604 #define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e)  (p)->lpVtbl->fnEnumGroupPlayers(p,a,b,c,d,e)
605 #define IDirectPlay3_EnumGroups(p,a,b,c,d)          (p)->lpVtbl->fnEnumGroups(p,a,b,c,d)
606 #define IDirectPlay3_EnumPlayers(p,a,b,c,d)         (p)->lpVtbl->fnEnumPlayers(p,a,b,c,d)
607 #define IDirectPlay3_EnumSessions(p,a,b,c,d,e)      (p)->lpVtbl->fnEnumSessions(p,a,b,c,d,e)
608 #define IDirectPlay3_GetCaps(p,a,b)                 (p)->lpVtbl->fnGetCaps(p,a,b)
609 #define IDirectPlay3_GetMessageCount(p,a,b)         (p)->lpVtbl->fnGetMessageCount(p,a,b)
610 #define IDirectPlay3_GetGroupData(p,a,b,c,d)        (p)->lpVtbl->fnGetGroupData(p,a,b,c,d)
611 #define IDirectPlay3_GetGroupName(p,a,b,c)          (p)->lpVtbl->fnGetGroupName(p,a,b,c)
612 #define IDirectPlay3_GetPlayerAddress(p,a,b,c)      (p)->lpVtbl->fnGetPlayerAddress(p,a,b,c)
613 #define IDirectPlay3_GetPlayerCaps(p,a,b,c)         (p)->lpVtbl->fnGetPlayerCaps(p,a,b,c)
614 #define IDirectPlay3_GetPlayerData(p,a,b,c,d)       (p)->lpVtbl->fnGetPlayerData(p,a,b,c,d)
615 #define IDirectPlay3_GetPlayerName(p,a,b,c)         (p)->lpVtbl->fnGetPlayerName(p,a,b,c)
616 #define IDirectPlay3_GetSessionDesc(p,a,b)          (p)->lpVtbl->fnGetSessionDesc(p,a,b)
617 #define IDirectPlay3_Initialize(p,a)                (p)->lpVtbl->fnInitialize(p,a)
618 #define IDirectPlay3_Open(p,a,b)                    (p)->lpVtbl->fnOpen(p,a,b)
619 #define IDirectPlay3_Receive(p,a,b,c,d,e)           (p)->lpVtbl->fnReceive(p,a,b,c,d,e)
620 #define IDirectPlay3_Send(p,a,b,c,d,e)              (p)->lpVtbl->fnSend(p,a,b,c,d,e)
621 #define IDirectPlay3_SetGroupData(p,a,b,c,d)        (p)->lpVtbl->fnSetGroupData(p,a,b,c,d)
622 #define IDirectPlay3_SetGroupName(p,a,b,c)          (p)->lpVtbl->fnSetGroupName(p,a,b,c)
623 #define IDirectPlay3_SetPlayerData(p,a,b,c,d)       (p)->lpVtbl->fnSetPlayerData(p,a,b,c,d)
624 #define IDirectPlay3_SetPlayerName(p,a,b,c)         (p)->lpVtbl->fnSetPlayerName(p,a,b,c)
625 #define IDirectPlay3_SetSessionDesc(p,a,b)          (p)->lpVtbl->fnSetSessionDesc(p,a,b)
626
627
628 /* Direct Play 3 Interface. */
629
630 #define IDirectPlay3_AddGroupToGroup(p,a,b)             (p)->lpVtbl->fnAddGroupToGroup(p,a,b)
631 #define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->fnCreateGroupInGroup(p,a,b,c,d,e,f)
632 #define IDirectPlay3_DeleteGroupFromGroup(p,a,b)        (p)->lpVtbl->fnDeleteGroupFromGroup(p,a,b)
633 #define IDirectPlay3_EnumConnections(p,a,b,c,d)         (p)->lpVtbl->fnEnumConnections(p,a,b,c,d)
634 #define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->fnEnumGroupsInGroup(p,a,b,c,d,e)
635 #define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->fnGetGroupConnectionSettings(p,a,b,c,d)
636 #define IDirectPlay3_InitializeConnection(p,a,b)        (p)->lpVtbl->fnInitializeConnection(p,a,b)
637 #define IDirectPlay3_SecureOpen(p,a,b,c,d)          (p)->lpVtbl->fnSecureOpen(p,a,b,c,d)
638 #define IDirectPlay3_SendChatMessage(p,a,b,c,d)     (p)->lpVtbl->fnSendChatMessage(p,a,b,c,d)
639 #define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->fnSetGroupConnectionSettings(p,a,b,c)
640 #define IDirectPlay3_StartSession(p,a,b)            (p)->lpVtbl->fnStartSession(p,a,b)
641 #define IDirectPlay3_GetGroupFlags(p,a,b)           (p)->lpVtbl->fnGetGroupFlags(p,a,b)
642 #define IDirectPlay3_GetGroupParent(p,a,b)          (p)->lpVtbl->fnGetGroupParent(p,a,b)
643 #define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)    (p)->lpVtbl->fnGetPlayerAccount(p,a,b,c,d)
644 #define IDirectPlay3_GetPlayerFlags(p,a,b)          (p)->lpVtbl->fnGetPlayerFlags(p,a,b)
645
646
647 /****************************************************************************
648  *
649  * DIRECT PLAY LOBBY VIRTUAL TABLE DEFINITIONS 
650  *
651  ****************************************************************************/
652
653
654 #define THIS LPDIRECTPLAYLOBBY this
655 typedef struct tagLPDIRECTPLAYLOBBY_VTABLE 
656 {
657     /*  IUnknown Methods "Inherited Methods" */
658     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
659     STDMETHOD_(ULONG,AddRef)        (THIS) PURE;
660     STDMETHOD_(ULONG,Release)       (THIS) PURE;
661
662     /*  IDirectPlayLobby Methods */
663     STDMETHOD(Connect)              (THIS_ DWORD, LPDIRECTPLAY2 *, IUnknown *) PURE;
664     STDMETHOD(CreateAddress)        (THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;       
665     STDMETHOD(EnumAddress)          (THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;         
666     STDMETHOD(EnumAddressTypes)     (THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;   
667     STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;       
668     STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;                                  
669     STDMETHOD(ReceiveLobbyMessage)  (THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;                  
670     STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE32) PURE;               
671     STDMETHOD(SendLobbyMessage)     (THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;                             
672     STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;                           
673     STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE32) PURE;
674
675
676 } DIRECTPLAYLOBBY_VTABLE, *LPDIRECTPLAYLOBBY_VTABLE;
677 #undef THIS
678
679 #define THIS LPDIRECTPLAYLOBBY2 this
680 typedef struct tagLPDIRECTPLAYLOBBY2_VTABLE 
681 {
682     /*  IUnknown Methods "Inherited Methods" */
683     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
684     STDMETHOD_(ULONG,AddRef)        (THIS) PURE;
685     STDMETHOD_(ULONG,Release)       (THIS) PURE;
686
687     /*  IDirectPlayLobby Methods */
688     STDMETHOD(Connect)              (THIS_ DWORD, LPDIRECTPLAY2 *, IUnknown *) PURE;
689     STDMETHOD(CreateAddress)        (THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;       
690     STDMETHOD(EnumAddress)          (THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;         
691     STDMETHOD(EnumAddressTypes)     (THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;   
692     STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;       
693     STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;                                  
694     STDMETHOD(ReceiveLobbyMessage)  (THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;                  
695     STDMETHOD(RunApplication)       (THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE32) PURE;               
696     STDMETHOD(SendLobbyMessage)     (THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;                             
697     STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;                           
698     STDMETHOD(SetLobbyMessageEvent) (THIS_ DWORD, DWORD, HANDLE32) PURE;
699
700     /*  IDirectPlayLobby2 Methods */
701     STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
702
703 } DIRECTPLAYLOBBY2_VTABLE, *LPDIRECTPLAYLOBBY2_VTABLE;
704 #undef THIS
705
706 /**********************************************************************************
707  *
708  * Macros for a nicer interface to DirectPlayLobby
709  *
710  **********************************************************************************/
711
712 /* COM Interface */
713
714 #define IDirectPlayLobby_QueryInterface(p,a,b)              (p)->lpVtbl->fnQueryInterface(p,a,b)
715 #define IDirectPlayLobby_AddRef(p)                          (p)->lpVtbl->fnAddRef(p)
716 #define IDirectPlayLobby_Release(p)                         (p)->lpVtbl->fnRelease(p)
717
718 #define IDirectPlayLobby2_QueryInterface(p,a,b)             (p)->lpVtbl->fnQueryInterface(p,a,b)
719 #define IDirectPlayLobby2_AddRef(p)                         (p)->lpVtbl->fnAddRef(p)
720 #define IDirectPlayLobby2_Release(p)                        (p)->lpVtbl->fnRelease(p)
721
722 /* Direct Play Lobby 1 */
723
724 #define IDirectPlayLobby_Connect(p,a,b,c)                   (p)->lpVtbl->fnConnect(p,a,b,c)
725 #define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f)       (p)->lpVtbl->fnCreateAddress(p,a,b,c,d,e,f)
726 #define IDirectPlayLobby_EnumAddress(p,a,b,c,d)             (p)->lpVtbl->fnEnumAddress(p,a,b,c,d)
727 #define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d)        (p)->lpVtbl->fnEnumAddressTypes(p,a,b,c,d)
728 #define IDirectPlayLobby_EnumLocalApplications(p,a,b,c)     (p)->lpVtbl->fnEnumLocalApplications(p,a,b,c)
729 #define IDirectPlayLobby_GetConnectionSettings(p,a,b,c)     (p)->lpVtbl->fnGetConnectionSettings(p,a,b,c)
730 #define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e)   (p)->lpVtbl->fnReceiveLobbyMessage(p,a,b,c,d,e)
731 #define IDirectPlayLobby_RunApplication(p,a,b,c,d)          (p)->lpVtbl->fnRunApplication(p,a,b,c,d)
732 #define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d)        (p)->lpVtbl->fnSendLobbyMessage(p,a,b,c,d)
733 #define IDirectPlayLobby_SetConnectionSettings(p,a,b,c)     (p)->lpVtbl->fnSetConnectionSettings(p,a,b,c)
734 #define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c)      (p)->lpVtbl->fnSetLobbyMessageEvent(p,a,b,c)
735
736 #define IDirectPlayLobby2_Connect(p,a,b,c)                  (p)->lpVtbl->fnConnect(p,a,b,c)
737 #define IDirectPlayLobby2_CreateAddress(p,a,b,c,d,e,f)      (p)->lpVtbl->fnCreateAddress(p,a,b,c,d,e,f)
738 #define IDirectPlayLobby2_EnumAddress(p,a,b,c,d)            (p)->lpVtbl->fnEnumAddress(p,a,b,c,d)
739 #define IDirectPlayLobby2_EnumAddressTypes(p,a,b,c,d)       (p)->lpVtbl->fnEnumAddressTypes(p,a,b,c,d)
740 #define IDirectPlayLobby2_EnumLocalApplications(p,a,b,c)    (p)->lpVtbl->fnEnumLocalApplications(p,a,b,c)
741 #define IDirectPlayLobby2_GetConnectionSettings(p,a,b,c)    (p)->lpVtbl->fnGetConnectionSettings(p,a,b,c)
742 #define IDirectPlayLobby2_ReceiveLobbyMessage(p,a,b,c,d,e)  (p)->lpVtbl->fnReceiveLobbyMessage(p,a,b,c,d,e)
743 #define IDirectPlayLobby2_RunApplication(p,a,b,c,d)         (p)->lpVtbl->fnRunApplication(p,a,b,c,d)
744 #define IDirectPlayLobby2_SendLobbyMessage(p,a,b,c,d)       (p)->lpVtbl->fnSendLobbyMessage(p,a,b,c,d)
745 #define IDirectPlayLobby2_SetConnectionSettings(p,a,b,c)    (p)->lpVtbl->fnSetConnectionSettings(p,a,b,c)
746 #define IDirectPlayLobby2_SetLobbyMessageEvent(p,a,b,c)     (p)->lpVtbl->fnSetLobbyMessageEvent(p,a,b,c)
747
748
749 /* Direct Play Lobby 2 */
750
751 #define IDirectPlayLobby2_CreateCompoundAddress(p,a,b,c,d)   (p)->lpVtbl->fnCreateCompoundAddress(p,a,b,c,d)
752
753 #pragma pack(4)
754
755 #undef STDMETHOD
756 #undef STDMETHOD_
757 #undef PURE
758 #undef FAR
759 #undef THIS_
760
761 #endif