Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Delphi2009, использование библиотеки IpHlpApi.dll

33K
07 апреля 2009 года
Zhmenia
9 / / 25.01.2008
Здравствуйте. Перейду сразу к вопросу.
Пишу программку на Delphi2009. Частью программы является просмотр исходящего и входящего траффика ADSL-соединения. Хочу использовать IpHlpAPI.dll - библиотеку, которую, казалось бы, и использую, но не так успешно, как хотелось бы. Исходник:
Код:
procedure TMainForm.Timer1Timer(Sender: TObject);
var
  Table     : TMibIfTable;
  FLibHandle    : THandle;
  i         : Integer;
  Size      : Integer;
begin
    application.processmessages();
    wget;
  lvTraffic.Items.BeginUpdate;
  lvTraffic.Items.Clear;  //Очищаем список
  FLibHandle := LoadLibrary('IPHLPAPI.DLL'); //Загружаем библиотеку
  if FLibHandle = 0 then Exit;
  @GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable');
  if not Assigned(GetIfTable) then
  begin
    FreeLibrary(FLibHandle);
    Close;
  end;

  Size := SizeOf(Table);
  if GetIfTable(@Table, @Size, False ) = 0 then //Выполняем функцию
    for i:= 0 to Table.dwNumEntries-1 do begin
      with lvTraffic.Items.Add do begin //Выводим результаты
        Caption := String(Table.Table.bDescr); //Наименование интерфейса
        SubItems.Add(GetMAC(TMAC(Table.Table.bPhysAddr),
          Table.Table.dwPhysAddrLen)); //MAC адрес
        SubItems.Add(IntToStr(Table.Table.dwInOctets)); //Всего принято байт
        SubItems.Add(IntToStr(Table.Table.dwOutOctets)); //Всего отправлено байт
      end;
    end;
  lvTraffic.Items.EndUpdate;
  FreeLibrary(FLibHandle);
end;


Вся соль в том, что код работает исправно. Но вот разница между результатом в Delphi7 и Delphi2009 огромная.
Кто-нибудь сможет помочь? Или если с этим вариантом все безнадежно, может есть другие рабочие? Заранее благодарю.
14
07 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Ну а в чем разница-то?
Вы учитываете что 2009-юникод, а 7-ка - Ansi?
33K
07 апреля 2009 года
Zhmenia
9 / / 25.01.2008
Да да, учел.
Разница в результате. Если я компилю этот код на Dlephi7, то я получаю 4 различных интерфейса и требуемую статистику по ним. Если на Delphi2009, то получаю название только одного интерфейса, мак по нему и ноль по входящему и исходящему трафику. Ну и плюс еще два-три интерфейса с пустым названием, маками типа 00-00-00-00-00-00 и нулями в трафике.
14
07 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Правильно я понял что в 2009 результат неверный?
Думаю вам следует проанализировать описание структуры TMibIfTable.
33K
07 апреля 2009 года
Zhmenia
9 / / 25.01.2008
Цитата: Phodopus
Правильно я понял что в 2009 результат неверный?


Да, именно так.

Цитата: Phodopus

Думаю вам следует проанализировать описание структуры TMibIfTable.


Благодарю, но каким именно образом? Меня просто смущает то, что код один, язык object pascal, библиотека одна и та же, но результат разный.
http://img4.imageshack.us/my.php?image=31072304.jpg

Во втором варианте заметил одну особенность: скажем, если я выключу свою WLAN, то видно будет следующее по очереди подключение(простое LAN), количество уменьшится на 1, остальные останутся пустыми.

14
07 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Ну наскоряк выведите sizeof структуры на D7 и D12
есть определенное подозрение на объявление
BYTE bPhysAddr[MAXLEN_PHYSADDR];
и
BYTE bDescr[MAXLEN_IFDESCR];
в pas-овском модуле у вас они могут быть объявлены как char
33K
07 апреля 2009 года
Zhmenia
9 / / 25.01.2008
Большое спасибо, так и есть!
спасло изменение типа массива bDescr в структуре TMibIfTable с char на AnsiChar.
Прошу прощения за невнимательность.
100K
08 октября 2018 года
Remona kashyap
1 / / 08.10.2018
Если файл IpHlpApi.dll не работает на компьютере, вам необходимо легко загрузить IpHlpApi.dll файл и получить решение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог