Russian Qt Forum
Июня 21, 2025, 14:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString to WCHAR*  (Прочитано 11667 раз)
Григорий
Гость
« : Марта 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.03 секунд. Запросов: 20.