Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Вниз

Domain_name_IP_Traffic   Найти похожие ветки 

 
jonin   (2009-06-06 21:26) [40]

извиняюсь за написание) поторопился
дак ты разбираешься очень хорошо, а я только начинаю изучать
а гденибудь можно про этот код прочитать или про примерно похожий? потому что в книгах с коментариями пишут а в интернете половина без(


 
jonin   (2009-06-06 21:31) [41]

TGetIfTable = function(pIfTable: PMibIfTable; pdwSize: PULONG; bOrder: Boolean): DWORD; stdcall; а вот что что функция делает?


 
Сергей М. ©   (2009-06-07 10:06) [42]

Это не функция, а декларация (объявление) ее прототипа.
Код самой ф-ции находится в iphlpapi.dll.
Эта библиотека экспортирует (публикует) текстовый идентификатор "GetIfTable", по которому после загрузки этой dll с пом., например, ф-ции GetProcAddress() можно получить точку входа (адрес начальной инструкции) в эту функцию и присвоить полученное значение некоей переменной MyGetIfTable, имеющей тип TGetIfTable. Последующие операторы вида
MyResult := MyGetIfTable(фактические параметры)
указывают компилятору на необходимость вызова ф-ции, адрес которой находится в переменной MyGetIfTable.
Ф-ция iphlpapi.GetIfTable предназначена для получения мгновенного информационного "снимка", содержащего таблицу текущего состояния сетевых интерфейсов. Каждая строка таблицы содержит структурированные данные, описывающие отдельный интерфейс и его тек.состояние.

http://www.xakep.ru/magazine/xa/100/116/1.asp


 
jonin   (2009-06-07 12:15) [43]

а дальше описываються переменные которые в этой длл используються?


 
jonin   (2009-06-07 13:03) [44]

procedure TForm1.Button6Click(Sender: TObject);
begin
if Timer1.Enabled then begin
 Timer1.Enabled := False;
 SetLength(IfData, 0); // вот здесь что делаеться?
 FreeLibrary(FLibHandle);
end
else
begin
 FLibHandle := LoadLibrary("IPHLPAPI.DLL"); // загружаем библиотеку
 Win32Check(FLibHandle <> 0);
 GetIfTable:=GetProcAddress(FLibHandle, "GetIfTable"); //  здесь что происходит
 Win32Check(Assigned(@GetIfTable)); //  и здесь
 Timer1.Interval := 1000;
 Timer1.Enabled := True;
end;
end;

end;


 
Сергей М. ©   (2009-06-07 14:16) [45]


> GetIfTable:=GetProcAddress(FLibHandle, "GetIfTable"); //
>  здесь что происходит


Здесь происходит получение точки входа (адреса) функции, которую библиотека экспортирует (публикует) под именем "GetIfTable", и присвоение полученного значения переменной с именем GetIfTable.


> Win32Check(Assigned(@GetIfTable)); //  и здесь


См. выше - полученное значение является действительным адресом (действительным указателем) интересующей функции "GetIfTable" , если оно <> 0 (not nil),
В противном случае (nil) это значение говорит о некоей ошибке, возникшей при выполнении ф-ции GetProcAddress, код которой м.б. тут же получен вызовом ф-ции GetLastError, а текстовое ее описание - вызовом  УSysErrorMessage(GetLastError)

Псевдофункция Assigned() возвращает True, если ее аргумент <> nil, иначе возвращает False.

Функция Win32Check не делает ничего, если ее аргумент равен True, в противном случае возбуждает исключительную ситуацию класса EWin32Error.


 
Palladin ©   (2009-06-07 14:18) [46]


> GetIfTable:=GetProcAddress(FLibHandle, "GetIfTable"); //
>  здесь что происходит

Происходит вызов функции GetProcAddress


> Win32Check(Assigned(@GetIfTable)); //  и здесь

Происходит вызов процедуры Win32Check


 
jonin   (2009-06-08 12:36) [47]

function GetUpdatedIfDataItem(var AMAC: TMAC; ASent, ARcvd: DWord): PIfDataItem; // здесь вызываетьсся функция из dll библиотеки?
begin
Result := GetItemByMAC(AMAC); //здесь ее результат
with Result^ do
begin // а вот что в этих 4 строчках происходит?
 SentDelta := Max(ASent - SentAmount, 0);
 RcvdDelta := Max(ARcvd - RcvdAmount, 0);
 SentAmount := ASent;
 RcvdAmount := ARcvd;
end;
end;


 
jonin   (2009-06-09 18:10) [48]

( чтото некто даже не подскадет


 
Сергей М. ©   (2009-06-09 21:26) [49]


> function GetUpdatedIfDataItem(var AMAC: TMAC; ASent, ARcvd:
>  DWord): PIfDataItem; // здесь вызываетьсся функция из dll
> библиотеки?


Нет тут никакого вызова никакой ф-ции из dll

> а вот что в этих 4 строчках происходит?



> SentDelta := Max(ASent - SentAmount, 0);


Вычисляется разность между текущим и предыдущим прочитанными показаниями числа переданных байт заданного для интерфейса, если полученная разность имеет отрицательное значение, то разность считается равной нулю.


> RcvdDelta := Max(ARcvd - RcvdAmount, 0);


тоже самое, но для принятых байт.


>  SentAmount := ASent;
>  RcvdAmount := ARcvd;



>  SentAmount := ASent;
>  RcvdAmount := ARcvd;


Текущие показания сохраняются., при следующем чтении таблицы интерфейсов эти сохраненные показания будут считаться предудущими (для расчета разниц, см. выше)



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.007 c
15-1244061366
Юрий
2009-06-04 00:36
2009.08.02
С днем рождения ! 4 июня 2009 четверг


15-1243518797
Unknown user
2009-05-28 17:53
2009.08.02
Использование компилятора в своих программах


6-1205321086
webSQLNeederr
2008-03-12 14:24
2009.08.02
Как залить файлы на ФТП програмно?


2-1244444905
LDV
2009-06-08 11:08
2009.08.02
CF_DIB и CF_BITMAP


2-1244237871
Цукор5
2009-06-06 01:37
2009.08.02
TWebBrowser получение элементов формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский