Delphi 2010 在编译GetHostByname时不能编译,但DELPHI 7.0可以!高手帮我一下
-----------------------------------------------------------------------------
uses WinSock;
function ResolveIP(HostName: string): string; 
type
  tAddr = array[0..100] of PInAddr;
  pAddr = ^tAddr;
var
  I: Integer;
  WSA: TWSAData;
  PHE: PHostEnt;
  P: pAddr;
begin
  Result := '';  WSAStartUp($101, WSA);
  try
    PHE := GetHostByName(pChar(HostName));
    if (PHE <> nil) then
    begin
      P := pAddr(PHE^.h_addr_list);
      I := 0;
      while (P^[I] <> nil) do
      begin
        Result := (inet_nToa(P^[I]^));
        Inc(I);
      end;
    end;
  except
  end;
  WSACleanUp;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text :=ResolveIP('www.163.com');
end;---------------------------------------------
以上在DELPHI 7.0下面正常,但DELPHI 2010 在gethostbyname 这里过不去了!
请问一下,我错在那了?

解决方案 »

  1.   

    我在d6中编译lz代码没问题,2010没用过,建议lz把WinSock改为WinSock2试试
      

  2.   

    PHE := GetHostByName(pChar(HostName)); 

    PHE := GetHostByName(PAnsiChar(HostName)); 在Delphi2010中PChar其实是PWideChar,宽字符指针,而在D7中则是PAnsiChar。而GetHostByName的参数是PAnsiChar。
      

  3.   


    function ResolveIP(HostName: AnsiString): AnsiString;
    type
      tAddr = array[0..100] of PInAddr;
      pAddr = ^tAddr;
    var
      I: Integer;
      WSA: TWSAData;
      PHE: PHostEnt;
      P: pAddr;
    begin
      Result := '';  WSAStartUp($101, WSA);
      try
        PHE := GetHostByName(PAnsiChar(HostName));
        if (PHE <> nil) then
        begin
          P := pAddr(PHE^.h_addr_list);
          I := 0;
          while (P^[I] <> nil) do
          begin
            Result := (inet_nToa(P^[I]^));
            Inc(I);
          end;
        end;
      except
      end;
      WSACleanUp;
    end;