This is how I create the address object.

DKNetCheck() is my own function that checks for errors and raises an exception if anything goes wrong.

Code:
procedure TDKNetClient.CreateHostAddress(out Address: IDirectPlay8Address);
begin
  { Create the address object }
  if CoCreateInstance&#40;CLSID_DirectPlay8Address, nil, CLSCTX_INPROC_SERVER, IID_IDirectPlay8Address, Address&#41; <> S_OK then
    raise EDKNetClientError.Create&#40;'Could not create DirectPlay8Address COM object'&#41;;
end;

procedure TDKNetClientIP.CreateHostAddress&#40;out Address&#58; IDirectPlay8Address&#41;;
begin
  inherited;

  &#123; Set the service provider for the address object &#125;
  DKNetCheck&#40;Address.SetSP&#40;CLSID_DP8SP_TCPIP&#41;&#41;;

  &#123; Set the port component of the address &#125;
  if FHostPort > 0 then
    DKNetCheck&#40;Address.AddComponent&#40;DPNA_KEY_PORT, @FHostPort, SizeOf&#40;FHostPort&#41;, DPNA_DATATYPE_DWORD&#41;&#41;;

  &#123; Set the hostname component of the address &#125;
  if Length&#40;FHostName&#41; > 0 then
    DKNetCheck&#40;Address.AddComponent&#40;DPNA_KEY_HOSTNAME, PWideChar&#40;FHostName&#41;, 2 * &#40;Length&#40;FHostName&#41; + 1&#41;, DPNA_DATATYPE_STRING&#41;&#41;;
end;
FHostPort is declared as an integer. FHostName is declared as WideString. Here's a neat trick:
Code:
  TDKNetClientIP = class&#40;TDKNetClient&#41;
  private
    FHostName&#58; WideString;
    function GetHostName&#58; String;
    procedure SetHostName&#40;const Value&#58; String&#41;;
  public
    property HostName&#58; String read GetHostName write SetHostName;
  end;

function TDKNetClientIP.GetHostName&#58; String;
begin
  Result &#58;= FHostName;
end;

procedure TDKNetClientIP.SetHostName&#40;const Value&#58; String&#41;;
begin
  FHostName &#58;= Value;
end;
Now you can access the HostName property as a normal string in your application (read and write as a standard string), but to DirectPlay it is a WideString (so you can typecast directly to PWideChar).

Hint: if you have the DirectX SDK installed, change to the debug version of DirectPlay (in the DirectX Control Panel applet) and set the debug output fairly high. Then open the Event Log from the View/Debug Windows menu (if you have Delphi Professional or higher). If not, go to http://www.sysinternals.com and get DebugView. It is a small utility that allows you to see all the debug information that an application can spit out. Remember to switch back to the retail version of DirectPlay after debugging though!

Hope that helps.