多谢!

解决方案 »

  1.   

    function TFORM1.LocalIP: string;
    type
      TaPInAddr = array [0..10] of PInAddr;
      PaPInAddr = ^TaPInAddr;
    var
      phe: PHostEnt;
      pptr: PaPInAddr;
      Buffer: array [0..63] of char;
      I: Integer;
      GInitData: TWSADATA;
    begin   //取得本机所有IP
      WSAStartup($101, GInitData);
      Result := '';
      GetHostName(Buffer, SizeOf(Buffer));
      phe :=GetHostByName(buffer);
      if phe = nil then Exit;
      pptr := PaPInAddr(Phe^.h_addr_list);
      I := 0;
      while pptr^[I] <> nil do begin
        result:= result + '#' + StrPas(inet_ntoa(pptr^[I]^));
        Inc(I);
      end;
      WSACleanup;
    end;
    procedure TForm1.Button12Click(Sender: TObject);
    beginSHOWMESSAGE(FORM1.LocalIP);
    end;
      

  2.   

    to WWWWA(aaaa) 编译时提示找不到 PInAddr结构, 是你自己编的结构吗
      

  3.   

    不出意外的话, WWWWA(aaaa) 的程序来自大富翁,所以(烦)也就别问PInAddr,那我也借它来回答您:
    在窗体上放一 TNMFTP组件,按纽的Onclick 
    label1.caption:=localip;
      

  4.   

    好像在WinSock中定义的。uses
      WinSock;
      

  5.   

    function LocalIP:string; 
    typeTaPInAddr = array [0..10] of PInAddr;PaPInAddr = ^TaPInAddr;varphe : PHostEnt;pptr : PaPInAddr;Buffer : array [0..63] of char;I : Integer;GInitData : TWSADATA;beginWSAStartup($101, GInitData);Result := '';GetHostName(Buffer, SizeOf(Buffer));phe :=GetHostByName(buffer);if phe = nil then Exit;pptr := PaPInAddr(Phe^.h_addr_list);I := 0;while pptr^[I] <> nil do beginresult:=StrPas(inet_ntoa(pptr^[I]^));Inc(I);end;WSACleanup;end;========================================program get_ip;useswinsock,sysutils;VARch : ARRAY[1..32] OF Char;i : Integer;WSData: TWSAData;MyHost: PHostEnt;beginIF WSAstartup(2,wsdata)<>0 THENBEGINWriteln('can''t start Winsock: Error ',WSAGetLastError);Halt(2);END;tryIF getHostName(@ch[1],32)<>0 THENBEGINWriteln('getHostName failed');Halt(3);END;exceptWriteln('getHostName failed');halt(3);end;MyHost:=GetHostByName(@ch[1]);IF MyHost=NIL THENBEGINWriteln(GetHostName('+StrPas(@ch[1])+') failed : Error'+IntToStr(WSAGetLastError));Halt(4);ENDELSEBEGINWrite('address ');FOR i:=1 TO 4 DOBEGINWrite(Ord(MyHost.h_addr^[i-1]));IF i<4 THENthen write('.')ELSEwriteln;END;END;end.===========================================