我用下面的函数调用后只能返回一个网卡的地址,对于多个网卡不知道如何处理,谢谢大家指教!
function HostToIP(Name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, Name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;

解决方案 »

  1.   

    procedure LocalIPs(slIPs : TStringList);
    var
      strLocalHost : string;
      pHE : PHostent;
      pInAd : PAPInAddr;
      saLocal : TSockAddr;
      i : integer;
    begin
      SetLength(strLocalHost, 255);
      if GetHostName(PChar(strLocalHost), 254) = SOCKET_ERROR then
        Exit;  pHE := GetHostByName(PChar(strLocalHost));
      pInAd := PAPInAddr(pHE^.h_addr_list);
      saLocal.sin_addr := (pInAd^[0]^);
      i := 0;
      while True do
      begin
        slIPs.Add(inet_ntoa(saLocal.sin_addr));
        i := i + 1;
        if(pInAd^[i] <> nil) then
          saLocal.sin_addr := (pInAd^[i]^)   //local host
        else
          break;
      end;
    end;
      

  2.   

    楼上再请教一下PAPInAddr类型在什么文件中有定义?我包含了WinSock头文件,还要什么文件。
      

  3.   

    下载ICS组件就OK了
    内有你需要的组件的