Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
IP-адрес контрол
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: IP-адрес контрол (Прочитано 9639 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Junk
Гость
IP-адрес контрол
«
:
17-11-2005 21:59 »
Привет.
Использую в программе CIPAddressCtrl. Как я понял из описания, там 4 поля для каждого байта ip-адреса. Прочитать/ввести можно либо обратившись к каждому байту, либо заранее сформировав слово DWORD.
Можно ли как-нибудь проще записывать туда адрес (используя int или обычную строку) , а не шеснадцатеричный код?
И произвести обратное преобразование: DWORD->строка ip-адреса в десятичном виде
«
Последнее редактирование: 17-11-2005 22:03 от Junk
»
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: IP-адрес контрол
«
Ответ #1 :
18-11-2005 05:29 »
>>Можно ли как-нибудь проще записывать туда адрес (используя int или обычную
>> строку) , а не шеснадцатеричный код?
>>И произвести обратное преобразование: DWORD->строка ip-адреса в десятичном
>> виде
хм.. что может быть проще DWORD ?
а преобразовывать из строки в DWORD -
inet_addr
unsigned long inet_addr( const char* cp);
наоборот -
inet_ntoa
char* FAR inet_ntoa( struct in_addr in ) ;
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Junk
Гость
Re: IP-адрес контрол
«
Ответ #2 :
18-11-2005 18:01 »
Хочу из диалога CAssDlg вызвать диалог SendDlg с заранее заданными значениями его полей m_Port и m_IPaddr. Но при реализации функции m_IPaddr.SetAddress выдается ошибка "Debug Assertion Failed". Не пойму из-за чего!
void CAssDlg::OnSendDlg()
{
char *go={""127.1.2.3""};
DWORD vvv=inet_addr(go);
if (vvv==INADDR_NONE)
{
AfxMessageBox("перебор");
exit(0);
}
SendToDlg STDlg;
STDlg.m_Port = 6886;
STDlg.m_IPaddr.SetAddress(vvv);
STDlg.DoModal();
}
Записан
Джон
просто
Администратор
Offline
Пол:
Re: IP-адрес контрол
«
Ответ #3 :
18-11-2005 23:02 »
Ошибка скорее всего здесь
STDlg.m_IPaddr.SetAddress(vvv);
Пока ты не вызвал STDlg.DoModal(); окно контрола у тебя не существует, а следовательно не может быть проинициаллизированно. Сохрани сначала vvv в какую нить переменную диалога (например DWORD m_vvv;) а в InitDialog уже делай m_IPaddr.SetAddress(m_vvv);
Записан
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Junk
Гость
Re: IP-адрес контрол
«
Ответ #4 :
20-11-2005 18:28 »
Как можно попроще разрешить следующую ситуацию:
В диалоговом окне ввода параметров (STDlg) ввожу ip-адрес (например, 1.2.3.4),
далее извлекаю его из элемента CIPAddressCtrl
m_IPaddr.GetAddress(dwHost);
в основном диалоге перевожу его в текстовый вид
struct in_addr sok_addr;
sok_addr.S_un.S_addr = STDlg.dwHost;
sHostAddr = inet_ntoa(sok_addr);
Проблема в том, что функция ::GetAddress() упаковывает байты в слово dwHost в обратном порядке и получается, что я шлю сообщение на ip-адрес 4.3.2.1
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: IP-адрес контрол
«
Ответ #5 :
21-11-2005 05:52 »
вообще-то есть вроде какая-то функция, которая делает нормальный hex-IP, но не помню
переверни значение так:
DWORD dwdIP=0;//=STDlg.dwHost;
DWORD dwd=STDlg.dwHost;
for(int i=0;i<4;i++,dwd>>=8)
{
dwdIP<<=8;
dwdIP|=(BYTE)dwd;
}
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: IP-адрес контрол
«
Ответ #6 :
21-11-2005 05:58 »
или так
BYTE by;
DWORD dwdIP=STDlg.dwHost;
by= *((BYTE*)(&dwdIP)+0);
*((BYTE*)(&dwdIP)+0)=*((BYTE*)(&dwdIP)+3);
*((BYTE*)(&dwdIP)+3)=by;
by= *((BYTE*)(&dwdIP)+1);
*((BYTE*)(&dwdIP)+1)=*((BYTE*)(&dwdIP)+2);
*((BYTE*)(&dwdIP)+2)=by;
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
IP-адрес контрол
Загружается...