Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Проблема с gethostbyname   Найти похожие ветки 

 
Separator ©   (2010-01-28 09:53) [0]

Win7, D2101
Использую модуль JwaWinsock2
Нужно получить ip по названию.
Вот объявление: function gethostbyname(name: PChar): PHostEnt
PChar в 2010 это PWideChar
Так вот, никак не мог понять почему функция не хочет работать, не возвращает ipшники по названию. Решил проблему с приведением тип WideString к AnsString и тогда всё заработало.
Вопрос так и должно быть?
Код моей функции:

procedure GetIPs(const aList: TStrings; const aHostName: string = "");
type
 PPInAddr = ^TPInAddr;
 TPInAddr = array [0..250] of PInAddr;
var
 mHost: PHostEnt;
 mHostName: AnsiString;
 mAdress: PPInAddr;
 mWSAData: TWSADATA;
 i: Integer;
begin
 if aList <> nil then
 begin
   WSAStartup(C_WSA_VERSION, mWSAData);
{$WARNINGS OFF}
   if Length(aHostName) > 0 then
   begin
     mHostName := aHostName;
     mHost:= GetHostByName(PChar(mHostName));
   end
   else
   begin
     SetLength(mHostName, 128);
     GetHostName(PChar(mHostName), Length(mHostName));
     mHost:= GetHostByName(PChar(mHostName));
     SetLength(mHostName, 0);
   end;
{$WARNINGS ON}
   if mHost <> nil then
   begin
     mAdress := PPInAddr(mHost^.h_addr_list);
     i := 0;
     while mAdress[i] <> nil do
     begin
       aList.Add(N2IP(mAdress[i]^));
       Inc(i);
     end
   end;
   WSACleanup;
 end;
end;


 
Rouse_ ©   (2010-01-28 20:48) [1]


> Так вот, никак не мог понять почему функция не хочет работать,
>  не возвращает ipшники по названию. Решил проблему с приведением
> тип WideString к AnsString и тогда всё заработало.
> Вопрос так и должно быть?

Ну если функция требует на вход анси, а ты ей юникод пихаешь, сам подумай, что она должна сделать?


 
Anatoly Podgoretsky ©   (2010-01-28 21:43) [2]

> Rouse_  (28.01.2010 20:48:01)  [1]

Хуже будет, когда переменная объявлена как Wide/AnsiString, а на самом деле в ней Ansi/WideString, тут приведение не спасет, поскольку это не приведение, а преобразование


 
Separator ©   (2010-01-29 08:41) [3]

Во из msdn:

struct hostent* FAR gethostbyname(
 __in  const char *name
);


Тут входящий параметр объявлен как char, в Delphi он будет аналогом AnsiChar или WideChar?



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

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.074 c
10-1182237882
Strang
2007-06-19 11:24
2013.03.22
Add-In


15-1348811854
MonoLife
2012-09-28 09:57
2013.03.22
Подскажите по проектировке таблиц БД.


15-1346412751
Dimka Maslov
2012-08-31 15:32
2013.03.22
Вот ведь штука!


15-1341211017
KilkennyCat
2012-07-02 10:36
2013.03.22
Понедельничная задачка :)


15-1347000404
ford
2012-09-07 10:46
2013.03.22
алгоритм для анализа изображения