Russian Qt Forum
Май 15, 2024, 22:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString to WCHAR*  (Прочитано 10961 раз)
Григорий
Гость
« : Март 20, 2013, 18:52 »

Уважаемые форумчане подскажите как отконвертить 'QString' to 'WCHAR*'  ?
Eсть API функция описанная примерно вот так x_ConnectW(void**, WCHAR*, UINT32, UINT32, _CONNECTION_INFO*)'
  - при таком вызове x_Connect(&hReader,L"192.168.1.95",0,0,NULL) коннект успешен
  -  есть у меня контрол QLineEdit хочу задавать адресс через него, в инете нашел примеры перевода вот таким способом
      x_Connect(&hReader,(WCHAR*)addrHost->text().toStdWString().c_str(),0,0,NULL) , но так происходит вылет программы

как мне правильно это сделать?

Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Март 20, 2013, 19:00 »

Код:
QString::toWCharArray(wchar_t *array)
?
Записан

Bepec
Гость
« Ответ #2 : Март 20, 2013, 19:19 »

это мудрёность win api Улыбающийся

WCHAR это wchar только тяпдефнутый. И да, необходимо его преобразовывать или сишным, или обычным QString().utf16() вроде Улыбающийся
Записан
Serr500
Гость
« Ответ #3 : Март 21, 2013, 09:13 »

как мне правильно это сделать?

Код:
x_Connect(&hReader, (WCHAR*)addrHost->text().utf16(), 0, 0, NULL)

WCHAR это wchar только тяпдефнутый.
wchar_t  Подмигивающий
Записан
Григорий
Гость
« Ответ #4 : Март 21, 2013, 10:14 »

Код:
QString::toWCharArray(wchar_t *array)
?

тож те эфект(приводит к вылету)
Записан
Bepec
Гость
« Ответ #5 : Март 21, 2013, 10:20 »

Видимо функция такая страшная. Специальная вылетающая функция.
Записан
Serr500
Гость
« Ответ #6 : Март 21, 2013, 10:24 »

Ещё раз:
Код:
x_Connect(&hReader, (WCHAR*)addrHost->text().utf16(), 0, 0, NULL)

И мне кажется, что toWCharArray Вы применяете неправильно.

Цитировать
Код:
int QString::toWCharArray ( wchar_t * array ) const
Fills the array with the data contained in this QString object. The array is encoded in utf16 on platforms where wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms where wchar_t is 4 bytes wide (most Unix systems).
array has to be allocated by the caller and contain enough space to hold the complete string (allocating the array with the same length as the string is always sufficient).
Записан
Григорий
Гость
« Ответ #7 : Март 21, 2013, 10:25 »

как мне правильно это сделать?

Код:
x_Connect(&hReader, (WCHAR*)addrHost->text().utf16(), 0, 0, NULL)

WCHAR это wchar только тяпдефнутый.

wchar_t  Подмигивающий

ну т.е я сначала получаю тип const ushort* а потом его явно привужу к  (WCHAR*) - но результат вылет программы
тоже происходит если я из QString получаю wchar_t* а потом привожу к  (WCHAR*) - тоже результат вылет программы
Записан
Григорий
Гость
« Ответ #8 : Март 21, 2013, 10:27 »

Видимо функция такая страшная. Специальная вылетающая функция.

почему тогда  L"текст" отрабатывает ?
Записан
Григорий
Гость
« Ответ #9 : Март 21, 2013, 10:30 »

Ещё раз:
Код:
x_Connect(&hReader, (WCHAR*)addrHost->text().utf16(), 0, 0, NULL)

И мне кажется, что toWCharArray Вы применяете неправильно.

Цитировать
Код:
int QString::toWCharArray ( wchar_t * array ) const
Fills the array with the data contained in this QString object. The array is encoded in utf16 on platforms where wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms where wchar_t is 4 bytes wide (most Unix systems).
array has to be allocated by the caller and contain enough space to hold the complete string (allocating the array with the same length as the string is always sufficient).

Вы можете дать рабочий пример чтобы с помощью toWCharArray из QString получить WCHAR*
Записан
carrygun
Гость
« Ответ #10 : Март 21, 2013, 10:35 »

У себя в вызовах АПИ использую такую конструкцию, работает ок
Код:
(wchar_t*)QString("some text").utf16()
Записан
Serr500
Гость
« Ответ #11 : Март 21, 2013, 10:36 »

Ёлки-палки, Вы вообще читать умеете? ТРЕТИЙ РАЗ. Вот что Вам нужно:
(WCHAR*)addrHost->text().utf16()

Вы можете дать рабочий пример чтобы с помощью toWCharArray из QString получить WCHAR*

Код:
QString str = "Some text...";
wchar_t* array = new wchar_t[str.length() + 1];
array[str.toWCharArray(array)] = '\0';

// ...

delete array;
Записан
Григорий
Гость
« Ответ #12 : Март 21, 2013, 10:55 »

Ёлки-палки, Вы вообще читать умеете? ТРЕТИЙ РАЗ. Вот что Вам нужно:
(WCHAR*)addrHost->text().utf16()

Вы можете дать рабочий пример чтобы с помощью toWCharArray из QString получить WCHAR*

Код:
QString str = "Some text...";
wchar_t* array = new wchar_t[str.length() + 1];
array[str.toWCharArray(array)] = '\0';

// ...

delete array;

спасибо всем кто помог разобратся, 2 варианта рабочие, дело было не в способах конвертации а в неправильном определении мною объекта addHost
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 22.