Just had a quick play with the code and one problem arises. Nothing is displayed in the listbox.

This is caused because you are not calling CoInitialize( nil );. so your constructor and destructor need to look a little like..

[pascal]
procedure TForm1.FormCreate( Sender : TObject );
begin
CoInitialize( nil );
// other init code here
end;

procedure TForm1.FormDestroy( Sender : TObject );
begin
// Other CleanUp code here
CoUninitialize;
end;
[/pascal]

It seems that in DirectPlay8 the callback is not used much. At least I could not get it to fire, but then I don't have the SDK in the office

NOTE : CoInitialize( nil ); & CoUninitialize; MUST be paired.