ive got the peer working but it wont enum the service providers.

i found this on msdn http://msdn.microsoft.com/archive/de...numeratesp.asp

and came up with this

[pascal] Peer: IDirectPlay8Peer;


function DirectPlayMessageHandler(pvUserContext: Pointer; dwMessageType: DWORD; pMessage: Pointer): HRESULT; stdcall;

implementation

{$R *.dfm}

function DirectPlayMessageHandler(pvUserContext: Pointer; dwMessageType: DWORD; pMessage: Pointer): HRESULT;
Begin
end;

procedure TForm1.FormCreate(Sender: TObject);
var
pdnSPInfo: PDPN_SERVICE_PROVIDER_INFO;
pdnSPInfoEnum: PDPN_SERVICE_PROVIDER_INFO;
dwItems: DWord;
dwSize: DWord;
i: DWord;

strBuf: PAnsiChar;

begin
pdnSPInfo := nil;
pdnSPInfoEnum := nil;
dwItems := 0;
dwSize := 0;
i := 0;
strBuf := nil;


CoCreateInstance(CLSID_DirectPlay8Peer, nil, CLSCTX_INPROC_SERVER, IID_IDirectPlay8Peer, peer);
Peer.Initialize(nil, @DirectPlayMessageHandler, 0);

//Determine the required buffer size
Peer.EnumServiceProviders(nil, nil, nil, dwSize, dwItems, 0);

//pdnSPInfo = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[dwSize]; ??

//Fill the buffer with service provider information
Peer.EnumServiceProviders(nil, nil, pdnSPInfo, dwSize, dwItems, 0);

// Print the provider descriptions
pdnSPInfoEnum := pdnSPInfo;

for i:=0 to dwItems {-1} do
Begin
try
DXUtil_ConvertAnsiStringToGenericCch(strBuf, @pdnSPInfoEnum.pwszName, 256);
ListBox1.Items.Add(strBuf);
Inc(pdnSPInfoEnum);
except
Break;
end;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Peer.Close(0);
Peer._Release;
end;[/pascal]

but it doesnt work also causes access violations on closing the app