这是一代获取本机IP的代码,运行后提示HostEnt: PHostEnt;和GInitData: TWSADATA;没有定义,这是为什么,我要怎么办,?请大家指导。
GetLocalIP(var LocalIp: string): Boolean;varHostEnt: PHostEnt;Ip: string;addr: pchar;Buffer: array [0..63] of char;GInitData: TWSADATA;beginResult := False;tryWSAStartup(2, GInitData);GetHostName(Buffer, SizeOf(Buffer));HostEnt := GetHostByName(buffer);if HostEnt = nil then Exit;addr := HostEnt^.h_addr_list^;ip := Format('%d.%d.%d.%d', [byte(addr [0]),byte (addr [1]), byte (addr [2]), byte (addr [3])]);LocalIp := Ip;Result := True;finallyWSACleanup;end;

解决方案 »

  1.   

    TWSADATA所在的单元没引用
      

  2.   

    uses  WinSock;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    很多时候你调用不常用的函数时:都要在uses加入一些单元
      

  4.   

    精简了一下
    function GetLocalIP(var LocalIp: string): Boolean;
    //This Requires USES WinSock
    var
      HostEnt: PHostEnt;
      addr: pchar;
      Buffer: array [0..63] of char;
      GInitData: TWSADATA;begin
      Result := False;
      try
        WSAStartup(2, GInitData);
        GetHostName(Buffer, SizeOf(Buffer));
        HostEnt := GetHostByName(buffer);
        if HostEnt = nil then Exit;
        addr := HostEnt^.h_addr_list^;
        LocalIp := Format('%d.%d.%d.%d', [byte(addr [0]), byte (addr [1]), byte (addr [2]), byte (addr [3])]);
        Result := True;
      finally
        WSACleanup;
      end;
    end;
      

  5.   

    我要把取得的IP值给edit1.text,这样程序提示 值的类型不对string and boolean
    各位老兄,快来帮忙啊。edit1.Text:=GetLocalIP();