📄 directplay8.pas
字号:
PDPNMsg_Server_Info = ^TDPNMsg_Server_Info;
TDPNMsg_Server_Info = packed record
dwSize : DWORD; // Size of this structure
dpnidServer : TDPNID; // DPNID of server
pvPlayerContext : Pointer; // Player context value
end;
//
// Terminated session structure for message handler
// (DPN_MSGID_TERMINATE_SESSION)
//
PDPNMsg_Terminate_Session = ^TDPNMsg_Terminate_Session;
TDPNMsg_Terminate_Session = packed record
dwSize : DWORD; // Size of this structure
hResultCode : HResult; // Reason
pvTerminateData : Pointer; // Data passed from Host/Server
dwTerminateDataSize : DWORD; // Size (in bytes) of pvTerminateData
end;
(****************************************************************************
*
* DirectPlay8 Forward Declarations For External Types
*
****************************************************************************)
type
IDirectPlay8Peer = interface;
IDirectPlay8Server = interface;
IDirectPlay8Client = interface;
(****************************************************************************
*
* DirectPlay8 Application Interfaces
*
****************************************************************************)
//
// COM definition for DirectPlay8 Client interface
//
IDirectPlay8Client = interface (IUnknown)
['{5102DACD-241B-11d3-AEA7-006097B01411}']
function Initialize (pvUserContext: Pointer; pfn: TDPNMessageHandler; dwFlags: DWORD): HResult; stdcall;
function EnumServiceProviders (pguidServiceProvider, pguidApplication: PGUID;
pSPInfoBuffer: PDPN_Service_Provider_Info; var pcbEnumData: DWORD;
var pcReturned: DWORD; dwFlags : DWORD): HResult; stdcall;
function EnumHosts (var pApplicationDesc: TDPN_Application_Desc;
pAddrHost, pDeviceInfo: IDirectPlay8Address; pvUserEnumData: Pointer;
dwUserEnumDataSize, dwEnumCount, dwRetryInterval, dwTimeOut: DWORD;
pvUserContext: Pointer; pAsyncHandle : PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function CancelAsyncOperation (hAsyncHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function Connect (var pdnAppDesc: TDPN_Application_Desc;
pAddrHost, pDeviceInfo: IDirectPlay8Address; pdnSecurity: PDPN_Security_Desc;
pdnCredentials: PDPN_Security_Credentials; pvUserConnectData: Pointer;
dwUserConnectDataSize: DWORD; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function Send (const prgBufferDesc: TDPN_Buffer_Desc; cBufferDesc, dwTimeOut: DWORD;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetSendQueueInfo (pdwNumMsgs, pdwNumBytes: PDWORD; dwFlags: DWORD): HResult; stdcall;
function GetApplicationDesc (pAppDescBuffer: PDPN_Application_Desc;
var pcbDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetClientInfo (const pdpnPlayerInfo: TDPN_Player_Info; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetServerInfo (pdpnPlayerInfo: PDPN_Player_Info; var pdwSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function GetServerAddress (out pAddress: IDirectPlay8Address; dwFlags: DWORD): HResult; stdcall;
function Close (dwFlags: DWORD): HResult; stdcall;
function ReturnBuffer (hBufferHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetCaps (var pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetCaps (const pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetSPCaps (const pguidSP: TGUID; const pdpnSPCaps: TDPN_SP_Caps): HResult; stdcall;
function GetSPCaps (const pguidSP: TGUID; var pdpnSPCaps: TDPN_SP_Caps; dwFlags: DWORD): HResult; stdcall;
function GetConnectionInfo (var pdpConnectionInfo: TDPN_Connection_Info; dwFlags: DWORD): HResult; stdcall;
function RegisterLobby (dpnHandle: TDPNHandle;
pIDP8LobbiedApplication: IDirectPlay8LobbiedApplication; dwFlags: DWORD): HResult; stdcall;
end;
//
// COM definition for DirectPlay8 Server interface
//
IDirectPlay8Server = interface (IUnknown)
['{5102DACE-241B-11d3-AEA7-006097B01411}']
function Initialize (pvUserContext: Pointer; pfn: TDPNMessageHandler; dwFlags: DWORD): HResult; stdcall;
function EnumServiceProviders (pguidServiceProvider, pguidApplication: PGUID;
pSPInfoBuffer: PDPN_Service_Provider_Info; var pcbEnumData: DWORD;
var pcReturned: DWORD; dwFlags : DWORD): HResult; stdcall;
function CancelAsyncOperation (hAsyncHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetSendQueueInfo (dpnid: TDPNID; pdwNumMsgs, pdwNumBytes: PDWORD; dwFlags: DWORD): HResult; stdcall;
function GetApplicationDesc (pAppDescBuffer: PDPN_Application_Desc;
var pcbDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetServerInfo (var pdpnPlayerInfo: TDPN_Player_Info; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetClientInfo (dpnid: TDPNID; pdpnPlayerInfo: PDPN_Player_Info;
pdwSize: PDWORD; dwFlags: DWORD): HResult; stdcall;
function GetClientAddress (dpnid: TDPNID; out pAddress: IDirectPlay8Address;
dwFlags: DWORD): HResult; stdcall;
function GetLocalHostAddresses (prgpAddress: PIDirectPlay8Addresses;
var pcAddress: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetApplicationDesc (const pad: TDPN_Application_Desc; dwFlags: DWORD): HResult; stdcall;
function Host (var pdnAppDesc: TDPN_Application_Desc;
prgpDeviceInfo: PIDirectPlay8Addresses; cDeviceInfo: DWORD;
pdpSecurity: PDPN_Security_Desc; pdpCredentials: PDPN_Security_Credentials;
pvPlayerContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function SendTo (dpnid: TDPNID; const pBufferDesc: TDPN_Buffer_Desc;
cBufferDesc, dwTimeOut: DWORD; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function CreateGroup (const pdpnGroupInfo: TDPN_Group_Info; pvGroupContext: Pointer;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function DestroyGroup (idGroup: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function AddPlayerToGroup (idGroup, idClient: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function RemovePlayerFromGroup (idGroup, idClient: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function SetGroupInfo (dpnid: TDPNID; const pdpnGroupInfo: TDPN_Group_Info;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetGroupInfo (dpnid: TDPNID; pdpnGroupInfo: PDPN_Group_Info;
var pdwSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function EnumPlayersAndGroups (prgdpnid: PDPNID;
var pcdpnid: DWORD; dwFlags: DWORD): HResult; stdcall;
function EnumGroupMembers (dpnid: TDPNID; prgdpnid: PDPNID;
var pcdpnid: DWORD; dwFlags: DWORD): HResult; stdcall;
function Close (dwFlags: DWORD): HResult; stdcall;
function DestroyClient (dpnidClient: TDPNID; pDestroyInfo: Pointer;
dwDestroyInfoSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function ReturnBuffer (hBufferHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetPlayerContext (dpnid: TDPNID; var ppvPlayerContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetGroupContext (dpnid: TDPNID; var ppvGroupContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetCaps (var pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetCaps (const pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetSPCaps (const pguidSP: TGUID; const pdpnSPCaps: TDPN_SP_Caps): HResult; stdcall;
function GetSPCaps (const pguidSP: TGUID; var pdpnSPCaps: TDPN_SP_Caps; dwFlags: DWORD): HResult; stdcall;
function GetConnectionInfo (dpnidEndPoint: TDPNID;
var pdpConnectionInfo: TDPN_Connection_Info; dwFlags: DWORD): HResult; stdcall;
function RegisterLobby (dpnHandle: TDPNHandle;
pIDP8LobbiedApplication: IDirectPlay8LobbiedApplication; dwFlags: DWORD): HResult; stdcall;
end;
//
// COM definition for DirectPlay8 Peer interface
//
IDirectPlay8Peer = interface (IUnknown)
['{5102DACF-241B-11d3-AEA7-006097B01411}']
function Initialize (pvUserContext: Pointer; pfn: TDPNMessageHandler; dwFlags: DWORD): HResult; stdcall;
function EnumServiceProviders (pguidServiceProvider, pguidApplication: PGUID;
pSPInfoBuffer: PDPN_Service_Provider_Info; var pcbEnumData: DWORD;
var pcReturned: DWORD; dwFlags : DWORD): HResult; stdcall;
function CancelAsyncOperation (hAsyncHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function Connect (const pdnAppDesc: PDPN_Application_Desc;
pHostAddr, pDeviceInfo: IDirectPlay8Address; pdnSecurity: PDPN_Security_Desc;
pdnCredentials: PDPN_Security_Credentials; pvUserConnectData: Pointer;
dwUserConnectDataSize: DWORD; pvPlayerContext: Pointer;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function SendTo (dpnid: TDPNID; const pBufferDesc: TDPN_Buffer_Desc;
cBufferDesc, dwTimeOut: DWORD; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetSendQueueInfo (pdwNumMsgs, pdwNumBytes: PDWORD; dwFlags: DWORD): HResult; stdcall;
function Host (const pdnAppDesc: PDPN_Application_Desc;
prgpDeviceInfo: PIDirectPlay8Addresses; cDeviceInfo: DWORD;
pdpSecurity: PDPN_Security_Desc; pdpCredentials: PDPN_Security_Credentials;
pvPlayerContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetApplicationDesc (pAppDescBuffer: PDPN_Application_Desc;
var pcbDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetApplicationDesc (const pad: TDPN_Application_Desc; dwFlags: DWORD): HResult; stdcall;
function CreateGroup (const pdpnGroupInfo: TDPN_Group_Info; pvGroupContext: Pointer;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function DestroyGroup (idGroup: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function AddPlayerToGroup (idGroup, idClient: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function RemovePlayerFromGroup (idGroup, idClient: TDPNID; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function SetGroupInfo (dpnid: TDPNID; const pdpnGroupInfo: TDPN_Group_Info;
pvAsyncContext: Pointer; phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetGroupInfo (dpnid: TDPNID; pdpnGroupInfo: PDPN_Group_Info;
var pdwSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function EnumPlayersAndGroups (prgdpnid: PDPNID;
var pcdpnid: DWORD; dwFlags: DWORD): HResult; stdcall;
function EnumGroupMembers (dpnid: TDPNID; prgdpnid: PDPNID;
var pcdpnid: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetPeerInfo (const pdpnPlayerInfo: PDPN_Player_Info; pvAsyncContext: Pointer;
phAsyncHandle: PDPNHandle; dwFlags: DWORD): HResult; stdcall; stdcall;
function GetPeerInfo (dpnid: TDPNID; pdpnPlayerInfo: PDPN_Player_Info;
var pdwSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function GetPeerAddress (dpnid: TDPNID; out pAddress: IDirectPlay8Address;
dwFlags: DWORD): HResult; stdcall;
function GetLocalHostAddresses (prgpAddress: PIDirectPlay8Addresses;
var pcAddress: DWORD; dwFlags: DWORD): HResult; stdcall;
function Close (dwFlags: DWORD): HResult; stdcall;
function EnumHosts (const pApplicationDesc: TDPN_Application_Desc;
pAddrHost, pDeviceInfo: IDirectPlay8Address; pvUserEnumData: Pointer;
dwUserEnumDataSize, dwEnumCount, dwRetryInterval, dwTimeOut: DWORD;
pvUserContext: Pointer; pAsyncHandle : PDPNHandle; dwFlags: DWORD): HResult; stdcall;
function DestroyPeer (dpnidClient: TDPNID; pDestroyInfo: Pointer;
dwDestroyInfoSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function ReturnBuffer (hBufferHandle: TDPNHandle; dwFlags: DWORD): HResult; stdcall;
function GetPlayerContext (dpnid: TDPNID; var ppvPlayerContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetGroupContext (dpnid: TDPNID; var ppvGroupContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetCaps (var pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetCaps (const pdpCaps: TDPN_Caps; dwFlags: DWORD): HResult; stdcall;
function SetSPCaps (const pguidSP: TGUID; const pdpnSPCaps: TDPN_SP_Caps): HResult; stdcall;
function GetSPCaps (const pguidSP: PGUID; var pdpnSPCaps: TDPN_SP_Caps; dwFlags: DWORD): HResult; stdcall;
function GetConnectionInfo (dpnidEndPoint: TDPNID;
var pdpConnectionInfo: TDPN_Connection_Info; dwFlags: DWORD): HResult; stdcall;
function RegisterLobby (dpnHandle: TDPNHandle;
pIDP8LobbiedApplication: IDirectPlay8LobbiedApplication; dwFlags: DWORD): HResult; stdcall;
function TerminateSession (pvTerminateData: Pointer; dwTerminateDataSize, dwFlags: DWORD): HResult; stdcall;
end;
(***************************************************************************
*
* DirectPlay8 Interface IIDs
*
****************************************************************************)
IID_IDirectPlay8Peer = IDirectPlay8Peer;
IID_IDirectPlay8Server = IDirectPlay8Server;
IID_IDirectPlay8Client = IDirectPlay8Client;
(****************************************************************************
*
* DirectPlay8 CLSIDs
*
****************************************************************************)
const
CLSID_DirectPlay8Client : TGUID = '{743F1DC6-5ABA-429f-8BDF-C54D03253DC2}';
CLSID_DirectPlay8Peer : TGUID = '{286F484D-375E-4458-A272-B138E2F80A6A}';
CLSID_DirectPlay8Server : TGUID = '{DA825E1B-6830-43d7-835D-0B5AD82956A2}';
(****************************************************************************
*
* DirectPlay8 Service Provider GUIDs
*
****************************************************************************)
CLSID_DP8SP_IPX : TGUID = '{53934290-628D-11D2-AE0F-006097B01411}';
CLSID_DP8SP_MODEM : TGUID = '{6D4A3650-628D-11D2-AE0F-006097B01411}';
CLSID_DP8SP_SERIAL : TGUID = '{743B5D60-628D-11D2-AE0F-006097B01411}';
CLSID_DP8SP_TCPIP : TGUID = '{EBFE7BA0-628D-11D2-AE0F-006097B01411}';
(****************************************************************************
*
* DirectPlay8 Functions
*
****************************************************************************)
(*)
* This function is no longer supported. It is recommended that CoCreateInstance be used to create
* DirectPlay8 lobby objects.
(*)
{$IFDEF DX8}
var
DirectPlay8Create : function (const pcIID: TGUID; out ppvInterface;
pUnknown: IUnknown): HResult; stdcall;
{$ENDIF}
(****************************************************************************
*
* DIRECTPLAY8 ERRORS
*
* Errors are represented by negative values and cannot be combined.
*
****************************************************************************)
const
_DPN_FACILITY_CODE = $015;
_DPNHRESULT_BASE = $8000;
MAKE_DPNHRESULT = (1 shl 31) or (_DPN_FACILITY_CODE shl 16) or _DPNHRESULT_BASE;
DPN_OK = S_OK;
DPNSUCCESS_EQUAL = (0 shl 31) or (_DPN_FACILITY_CODE shl 16) or _DPNHRESULT_BASE + $05;
DPNSUCCESS_NOTEQUAL = (0 shl 31) or (_DPN_FACILITY_CODE shl 16) or _DPNHRESULT_BASE + $0A;
DPNSUCCESS_PENDING = (0 shl 31) or (_DPN_FACILITY_CODE shl 16) or _DPNHRESULT_BASE + $0E;
DPNERR_ABORTED = MAKE_DPNHRESULT + $30 ;
DPNERR_ADDRESSING = MAKE_DPNHRESULT + $40 ;
DPNERR_ALREADYCLOSING = MAKE_DPNHRESULT + $50 ;
DPNERR_ALREADYCONNECTED = MAKE_DPNHRESULT + $60 ;
DPNERR_ALREADYDISCONNECTING = MAKE_DPNHRESULT + $70 ;
DPNERR_ALREADYINITIALIZED = MAKE_DPNHRESULT + $80 ;
DPNERR_ALREADYREGISTERED = MAKE_DPNHRESULT + $90 ;
DPNERR_BUFFERTOOSMALL = MAKE_DPNHRESULT + $100 ;
DPNERR_CANNOTCANCEL = MAKE_DPNHRESULT + $110 ;
DPNERR_CANTCREATEGROUP = MAKE_DPNHRESULT + $120 ;
DPNERR_CANTCREATEPLAYER = MAKE_DPNHRESULT + $130 ;
DPNERR_CANTLAUNCHAPPLICATION = MAKE_DPNHRESULT + $140 ;
DPNERR_CONNECTING = MAKE_DPNHRESULT + $150 ;
DPNERR_CONNECTIONLOST = MAKE_DPNHRESULT + $160 ;
DPNERR_CONVERSION = MAKE_DPNHRESULT + $170 ;
DPNERR_DATATOOLARGE = MAKE_DPNHRESULT + $175 ;
DPNERR_DOESNOTEXIST = MAKE_DPNHRESULT + $180 ;
DPNERR_DUPLICATECOMMAND = MAKE_DPNHRESULT + $190 ;
DPNERR_ENDPOINTNOTRECEIVING = MAKE_DPNHRESULT + $200 ;
DPNERR_ENUMQUERYTOOLARGE = MAKE_DPNHRESULT + $210 ;
DPNERR_ENUMRESPONSETOOLARGE = MAKE_DPNHRESULT + $220 ;
DPNERR_EXCEPTION = MAKE_DPNHRESULT + $230 ;
DPNERR_GENERIC = E_FAIL;
DPNERR_GROUPNOTEMPTY = MAKE_DPNHRESULT + $240 ;
DPNERR_HOSTING = MAKE_DPNHRESULT + $250 ;
DPNERR_HOSTREJECTEDCONNECTION = MAKE_DPNHRESULT + $260 ;
DPNERR_HOSTTERMINATEDSESSION = MAKE_DPNHRESULT + $270 ;
DPNERR_INCOMPLETEADDRESS = MAKE_DPNHRESULT + $280 ;
DPNERR_INVALIDADDRESSFORMAT = MAKE_DPNHRESULT + $290 ;
DPNERR_INVALIDAPPLICATION = MAKE_DPNHRESULT + $300 ;
DPNERR_INVALIDCOMMAND = MAKE_DPNHRESULT + $310 ;
DPNERR_INVALIDDEVICEADDRESS = MAKE_DPNHRESULT + $320 ;
DPNERR_INVALIDENDPOINT = MAKE_DPNHRESULT + $330 ;
DPNERR_INVALIDFLAGS = MAKE_DPNHRESULT + $340 ;
DPNERR_INVALIDGROUP = MAKE_DPNHRESULT + $350 ;
DPNERR_INVALIDHANDLE = MAKE_DPNHRESULT + $360 ;
DPNERR_INVALIDHOSTADDRESS = MAKE_DPNHRESULT + $370 ;
DPNERR_INVALIDINSTANCE = MAKE_DPNHRESULT + $380 ;
DPNERR_INVALIDINTERFACE = MAKE_DPNHRESULT + $390 ;
DPNERR_INVALIDOBJECT = MAKE_DPNHRESULT + $400 ;
DPNERR_INVALIDPARAM = E_INVALIDARG;
DPNERR_INVALIDPASSWORD = MAKE_DPNHRESULT + $410 ;
DPNERR_INV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -