Главная страница
    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.075 c
15-1330713889
wl
2012-03-02 22:44
2013.03.22
Небольшое предложение по улучшению форума


2-1335502666
leklerk
2012-04-27 08:57
2013.03.22
Когда нужно использовать CoInitialize?


15-1342885937
alexdn
2012-07-21 19:52
2013.03.22
Курсор для сайта


2-1337101522
опшипка
2012-05-15 21:05
2013.03.22
опшипка


15-1329165002
Юрий
2012-02-14 00:30
2013.03.22
С днем рождения ! 14 февраля 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский