Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Inet_Addr и PAnsiChar, Не правильно приводит тип 
V
    Опции темы
AKATAN
Дата 28.7.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: нет
Всего: 1



Переносил код с 7-го Delphi на 2010.

В оригинале был код:
Код

 Addr.sin_addr.S_addr := Inet_Addr(PCahr(IPEdit.Text));

Все отлично работало...

Компилятор Delphi 2010 выдал ошибку:
[DCC Error] main_frm.pas(81): E2010 Incompatible types: 'Char' and 'AnsiChar'
Попробовал просто привести к PAnsiChar:
Код

Addr.sin_addr.S_addr := Inet_Addr(PAnsiChar(IPEdit.Text));


Ошибку компилятор не ловит, но сокет на такой адрес не привязывается.

Когда делаю так:
Код

Addr.sin_addr.S_addr := Inet_Addr(PAnsiChar('192.168.1.100'));

или:
Код

Addr.sin_addr.S_addr := Inet_Addr('192.168.1.100');

то все работает.  smile 

Перепробовал все известные мне махинации с указателями и переменными - не помогло.

Хелп... 
PM MAIL ICQ   Вверх
xkor
Дата 28.7.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 1
Всего: 4



компилятор вас не совсем верно понимает, так что придётся ему более доходчиво объяснить:
Код

Addr.sin_addr.S_addr := Inet_Addr(PAnsiChar(AnsiString(IPEdit.Text)));

PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
AKATAN
Дата 28.7.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: нет
Всего: 1



xkor, спасибо!  smile  Помогло, работает.
PM MAIL ICQ   Вверх
CodeMonkey
Дата 31.7.2010, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: нет
Всего: 89



Цитата(xkor @  28.7.2010,  18:15 Найти цитируемый пост)
компилятор вас не совсем верно понимает

Как раз компилятор-то понимает всё верно, а вот автор вопроса, видимо, слабо понимает, что же он делает.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
xkor
Дата 1.8.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 1
Всего: 4



Цитата(CodeMonkey @  31.7.2010,  04:06 Найти цитируемый пост)
Как раз компилятор-то понимает всё верно, а вот автор вопроса, видимо, слабо понимает, что же он делает. 

сойдемся на нейтральном: у компилятора и автора возникло небольшое недопонимание)
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
AKATAN
Дата 2.8.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: нет
Всего: 1



Цитата
Как раз компилятор-то понимает всё верно, а вот автор вопроса, видимо, слабо понимает, что же он делает.


Тогда объясните, почему в 7-м дельфи успешно работал код:
Inet_Addr(PChar(IPEdit.Text)) ?

PChar('string') преобразует 'string' в указатель на значение типа Char?
PAnsiChar('string') преобразует 'string' в указатель на значение типа AnsiChar?
Я ошибаюсь?
Если нет, то почему PChar(строковая_переменная) приводила к нужному результату, а PAnsiChar(строковая_переменная) к ложному?

Это сообщение отредактировал(а) AKATAN - 2.8.2010, 16:44
PM MAIL ICQ   Вверх
xkor
Дата 2.8.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: 1
Всего: 4



AKATAN, дело в том что до дельфи 2009 string = AnsiString, а начиная с 2009 string = WideString (ну и соответственно с другими строковыми и символьными типами), так что теперь напрямую из string в PAnsiChar не преобразовать, надо сначала в AnsiString
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
AKATAN
Дата 2.8.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 30.9.2008
Где: Украина

Репутация: нет
Всего: 1



xkor - еще раз благодарствую! Хмм... видимо я слишком олдфаг...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0965 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.