Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Проблема с получением данных


Автор: apostolnikolai 30.1.2011, 23:07
Почему в место данных в Windows XP выдает user posted image
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Adapters, Adapter: PIP_ADAPTER_INFO;
  Size, Size2: ULONG;
  IpAddrString: PIP_ADDR_STRING;
  GatewayString: PIP_ADDR_STRING;
  DnsServerString: PIP_ADDR_STRING;
  pPerAdapterInfo: PIP_PER_ADAPTER_INFO;
  i: integer;
begin
  Size := 0;
  if GetAdaptersInfo(nil, Size) <> ERROR_BUFFER_OVERFLOW then Exit;
  Adapters := AllocMem(Size);
  try
    if GetAdaptersInfo(Adapters, Size) = 0 then
    begin
      Adapter := Adapters;
      while Adapter <> nil do
      begin
        Memo1.Lines.Add(pChar(@Adapter^.AdapterName) + '---' + pChar(@Adapter^.Description));

        Memo1.Lines.Add('          ' + 'Elenco Indirizzi IP:');
        IpAddrString := @Adapter^.IpAddressList;
        while IpAddrString <> nil do
        begin
          Memo1.Lines.Add('          ' + '          ' + (IpAddrString^.IpAddress.S) + '---' + (IpAddrString^.IpMask.S));
          IpAddrString := IpAddrString^.Next;
        end;

        Memo1.Lines.Add('          ' + 'Elenco Gateways:');
        GatewayString := @Adapter^.GatewayList;
        while GatewayString <> nil do
        begin
          Memo1.Lines.Add('          ' + '          ' + (GatewayString^.IpAddress.S));
          GatewayString := GatewayString^.Next;
        end;

        Size2 := 0;
        if GetPerAdapterInfo(Adapter^.Index, nil, Size2) <> ERROR_BUFFER_OVERFLOW then Exit;
        pPerAdapterInfo := AllocMem(Size2);
        GetPerAdapterInfo(Adapter^.Index, pPerAdapterInfo, Size2);

        Memo1.Lines.Add('          ' + 'Elenco Server DNS:');
        DnsServerString := @pPerAdapterInfo^.DnsServerList;
        while DnsServerString <> nil do
                begin
          Memo1.Lines.Add('          ' + '          ' + (DnsServerString^.IpAddress.S));
          DnsServerString := DnsServerString^.Next;
        end;

        Adapter := Adapter^.Next;
      end;
    end;
  finally
    FreeMem(Adapters);
    FreeMem(pPerAdapterInfo);
  end;

Автор: MetalFan 1.2.2011, 18:58
Потому, что код рассчитан под неюникод версию делфи, а ты наверное его пытаешься в 2009-XE пускать?
у меня код отрабатывает, если PChar на PAnsiChar поменять.

Автор: bagos 2.2.2011, 10:58
А не лучше использовать WMI ? Мне кажется он больше свободы действий может предоставить.

Автор: MetalFan 2.2.2011, 12:13
bagos, А если служба не запущена?

Автор: bagos 2.2.2011, 12:34
MetalFan, по умолчанию то запущена! ;) ну да ладно, твоя правда))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)