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

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.063 c
15-1333975733
MBo
2012-04-09 16:48
2013.03.22
Delphi XE. Окно Watch List.


15-1332788348
IceKhan
2012-03-26 22:59
2013.03.22
как включить отображение системных файлов в OpenDialog


15-1345752441
Дмитрий С
2012-08-24 00:07
2013.03.22
Фотографы извращенцы


15-1334126868
xss22
2012-04-11 10:47
2013.03.22
Как записать TMemIniFile в TMemoryStream и обратно?


15-1349006365
Tirael
2012-09-30 15:59
2013.03.22
нубский вопрос про винду





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский