Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заполнение структуры PHostEnt [D7, WinXP]


n_shadow ©   (2006-12-20 17:23:00) 

Нужно запонить каждый параметр структуры PHostEnt отдельно и в ручную. У меня ничего не получается, всё уже перепробовал, может кто поможет!? Заранее благодарен!


novill   (2006-12-22 09:24:00) [1]

> [13] n_Shadow   (21.12.06 21:53)

Ну покажи как сделал-то. А то "так не получится", "так не получится"...


n_Shadow   (2006-12-21 21:53:00) [2]

Всем спасибо за помощь, я всё сделал!


n_Shadow   (2006-12-21 18:45:00) [3]


> можно например так  Host.h_addr_list^:=Pchar('127.0.0.1');


Не, так не получится.
function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
   t: TInAddr;
begin
 t.S_addr:=inet_addr(PChar('127.0.0.1'));
 Host:=gethostbyaddr(@t, SizeOf(in_addr), AF_INET);
 Host.h_addr_list^:=PChar('192.168.1.110');
 result:=Host;
end;

Результат: ип адрес 49.57.50.46! И это если учесть, что хост это я. А если его нет? Нужно полностью структуру заполнить, если этого не сделать, следовательно ошибка будет. Ип адрес просто так Host.h_addr_list^:=PChar('192.168.1.110'); не получится туда загнать.


novill   (2006-12-21 17:36:00) [4]

можно например так

Host.h_addr_list^:=Pchar('127.0.0.1');


novill   (2006-12-21 17:27:00) [5]

> [9] n_Shadow   (21.12.06 17:16)

а как бы ты заполнял такую структуру?

hostent
{  
char FAR* h_name;  
char FAR  FAR** h_aliases;  
short h_addrtype;  
short h_length;  
char FAR  FAR** h_addr_list;
} hostent;


n_Shadow   (2006-12-21 17:16:00) [6]

Пишу же, что нужно полностью заполнить структуру PHostEnt. Да и не могу я вызвать Orig_gethostbyname(name) т.к. у меня перехват это функции происходит, ссылка будет всё равно на Newgethostbyname. Result^.h_name это не проблема, проблема в h_addr_list. Нужно не имя хоста, а ип адрес любой вписать.


n_Shadow   (2006-12-21 17:16:00) [7]

Пишу же, что нужно полностью заполнить структуру PHostEnt. Да и не могу я вызвать Orig_gethostbyname(name) т.к. у меня перехват это функции происходит, ссылка будет всё равно на Newgethostbyname. Result^.h_name это не проблема, проблема в h_addr_list. Нужно не имя хоста, а ип адрес любой вписать.


Rouse_   (2006-12-21 14:42:00) [8]

function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
   t: TInAddr;
begin
 Result := Orig_gethostbyname(name);
 Result^.h_name := пиши что вздумается...
end;


Anatoly Podgoretsky   (2006-12-21 12:38:00) [9]

> n_shadow  (21.12.2006 12:25:05)  [5]

Не требуется, можешь даже шнурок из компьютера вытащить.


n_shadow   (2006-12-21 12:25:00) [10]

function Newgethostbyname(name: PChar): PHostEnt; stdcall;
var Host: PHostEnt;
    t: TInAddr;
begin
  t.S_addr:=inet_addr(PChar('192.168.1.110'));
  Host:=gethostbyaddr(@t, SizeOf(in_addr), AF_INET);
  result:=Host;
end;

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


Rouse_   (2006-12-21 11:57:00) [11]

показывай код...


Плохиш   (2006-12-21 11:57:00) [12]

Банально, конечно, но "Ошибка в 17й строке".


n_shadow   (2006-12-21 11:54:00) [13]

Итак, есть функция:
function gethostbyname(name: PChar): PHostEnt; stdcall; Я подменяю данную функцию на свою новую и мне нужно заполнить структуру PHostEnt. Т.е. вписать ip адрес, имя хоста и т.д. полностью структуру:
h_name: PChar;
h_aliases: ^PChar;
h_addrtype: Smallint;
h_length: Smallint;
case Byte of
 0: (h_addr_list: ^PChar);
 1: (h_addr: ^PChar)


Rouse_   (2006-12-20 23:17:00) [14]


>  отдельно и в ручную. У меня ничего не получается

Что значит не получается?
 Z: PHostEnt ;
begin
 New(Z);
 try
   Z^.h_name := 'qwe';
   ShowMessage(Z^.h_name);
 finally
   Dispose(Z);
 end;
Вышеописанный способ не заполняет структуру?


Наверх

Титульная страница Поиск, карта сайта Написать письмо