Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Григорий от Март 20, 2013, 18:52



Название: QString to WCHAR*
Отправлено: Григорий от Март 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) , но так происходит вылет программы

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



Название: Re: QString to WCHAR*
Отправлено: gil9red от Март 20, 2013, 19:00
Код:
QString::toWCharArray(wchar_t *array)
?


Название: Re: QString to WCHAR*
Отправлено: Bepec от Март 20, 2013, 19:19
это мудрёность win api :)

WCHAR это wchar только тяпдефнутый. И да, необходимо его преобразовывать или сишным, или обычным QString().utf16() вроде :)


Название: Re: QString to WCHAR*
Отправлено: Serr500 от Март 21, 2013, 09:13
как мне правильно это сделать?

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

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


Название: Re: QString to WCHAR*
Отправлено: Григорий от Март 21, 2013, 10:14
Код:
QString::toWCharArray(wchar_t *array)
?

тож те эфект(приводит к вылету)


Название: Re: QString to WCHAR*
Отправлено: Bepec от Март 21, 2013, 10:20
Видимо функция такая страшная. Специальная вылетающая функция.


Название: Re: QString to WCHAR*
Отправлено: Serr500 от Март 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).


Название: Re: QString to WCHAR*
Отправлено: Григорий от Март 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*) - тоже результат вылет программы


Название: Re: QString to WCHAR*
Отправлено: Григорий от Март 21, 2013, 10:27
Видимо функция такая страшная. Специальная вылетающая функция.

почему тогда  L"текст" отрабатывает ?


Название: Re: QString to WCHAR*
Отправлено: Григорий от Март 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*


Название: Re: QString to WCHAR*
Отправлено: carrygun от Март 21, 2013, 10:35
У себя в вызовах АПИ использую такую конструкцию, работает ок
Код:
(wchar_t*)QString("some text").utf16()


Название: Re: QString to WCHAR*
Отправлено: Serr500 от Март 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;


Название: Re: QString to WCHAR*
Отправлено: Григорий от Март 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