Главная страница
    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.068 c
2-1334861238
tester2012
2012-04-19 22:47
2013.03.22
TThread


2-1337504907
Глеб
2012-05-20 13:08
2013.03.22
Поиск нужного компонента


4-1258957583
pg81
2009-11-23 09:26
2013.03.22
Как получить в переменную frm:TForm зная Handle окна?


4-1260613396
GreyWolf
2009-12-12 13:23
2013.03.22
Установка CoInitFlags в COINIT_MULTITHREADED портит иконки файлов


15-1342038603
Юрий
2012-07-12 00:30
2013.03.22
С днем рождения ! 12 июля 2012 четверг





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