С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
#1

Конвертация Cstring в wchar_t* - C++

15.10.2013, 11:42. Просмотров 1106. Ответов 11
Метки нет (Все метки)

Есть функция, которая возвращает тип CString и нужно этот CString использовать в функции wcscpy. Как правильно сделать преобразования?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 11:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конвертация Cstring в wchar_t* (C++):

Конвертация в wchar_t - C++
Прочитал что если перед строковым литералом написать L то он будет приведён к типу wchar_t, но почему-то на выходе у меня получается адрес,...

Конвертация Float to wchar_t - C++
Здравствуйте, уважаемые форумчане. Помогите, мне, пожалуйста. Как правильно перевести float в wchar_t? Все что я нашёл в интернете - не...

Конвертация wchar_t в число целого типа. Обработка исключения - C++
Конвертирую считываемые данные с Экселя в число типа int,для дальнейшей проверки вхождения в массив. buff содержит значение 12345qwe ...

Почему const wchar_t* воспринимается как wchar_t* ? - C++
Здравствуйте. Я написал вот так: const wchar_t* dir = directory.c_str(); StartModule(dir); и такая ошибка появляется : ...

Cannot convert from 'wchar_t' to 'const wchar_t *' - C++
такой код, порылся в инете не помогло. ломать голову надоело может кто подскажет, буду благодарен. wchar_t * english = L"abvgdee...

Wchar_t и unsigned wchar_t в windows - C++
Печально, но факт: wchar_t - 2 байта, unsigned wchar_t - 4 байта Вопрос1: используется ли unsigned wchar_t для хранения...

11
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
15.10.2013, 11:48 #2
1. У тебя проект-то какой - уникодный или нет?
2. Приведи пример кода, будет легче дать правильный совет.
0
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 12:03  [ТС] #3
CheshireCat, Я записал все строки в StringTable. Например далее приведенный IDSS_DEFINITION01 это строка "Показатель". Что-бы загрузить этот ID, я написал класс StrUtils, в котором реализовал вот такую функцию
C++
1
2
3
4
5
6
7
static CString LoadStringById(int sID)
{
    CString StrTbl;
    ::LoadString(NULL, sID, StrTbl.GetBuffer(100), 100);
    StrTbl.ReleaseBuffer();
    return StrTbl;
};
Далее в своем коде вызываю метод данного класса и вот тут появились проблемы с преобразованиями
C++
1
wcscpy(str,StrUtils::LoadStringById(IDSS_DEFINITION01));
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,633
15.10.2013, 12:21 #4
А если прогнать в char* и обратно?
У CString вроде был аналог string::data()
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
15.10.2013, 12:45 #5
Так вот вопрос-то: у тебя проект уникодный или нет? Потому что если уникодный - то и делать ничего не надо, у класса CString есть operator LPCTSTR(), возвращающий const TCHAR*, который раскроется в const wchar_t*. А если проект не уникодный, то у меня сразу же возникает вопрос: почему применяется функция wcscpy, а не strcpy ? Какие к тому основания?
0
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 13:11  [ТС] #6
MrGluck, а можно элементарный пример.
CheshireCat, проект уникодный, но с оператором LPCTSTR() почему-то не работает
0
SatanaXIII
15.10.2013, 13:19
  #7

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
есть operator LPCTSTR()
Это ж макрос.

0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
15.10.2013, 14:26 #8
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Это ж макрос.
Гмм. Заглянул в исходники: они утверждают, что это именно оператор.....

linkoln78, а приведи-ка минимальный код, воспроизводящий проблему.
0
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 14:35  [ТС] #9
CheshireCat, метод LoadStringById описывал выше. После wcscpy(..) возникает ошибка. Проект использует многобайтную кодировку. не уникодную, извиняюсь
Error 9 error C2664: 'wcscpy' : cannot convert parameter 2 from 'CString' to 'const wchar_t *'
C++
1
2
 WCHAR str[100];    
    wcscpy(str, StrUtils::LoadStringById(IDSS_DEFINITION01));
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
15.10.2013, 14:44 #10
Цитата Сообщение от linkoln78 Посмотреть сообщение
Проект использует многобайтную кодировку. не уникодную, извиняюсь
О! Вот в этом и может быть дело....
Попробуй порыться в MSDN, начиная вот отсюда: http://msdn.microsoft.com/ru-ru/library/ey142t48%28v=vs.90%29.aspx
0
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 15:07  [ТС] #11
CheshireCat, Все равно не понимаю, создал новый проект в уникоде, вот такой код отлично работает
C++
1
2
3
4
5
6
CString str;
    ::LoadString(NULL, 102, str.GetBuffer(100), 100);
    str.ReleaseBuffer();
    WCHAR szStr[100];
    wcscpy_s(szStr,str);
    MessageBox(szStr,_T("Convert"),MB_OK);
Как сделать такие же преобразования в мульти байт не могу понять
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
15.10.2013, 15:28 #12
А MSDN и гугл на что? Используй функции MultiByteToWideChar и WideCharToMultiByte. Примеры кода тоже есть, можно начать отсюда: http://social.msdn.microsoft.com/For...orum=vcgeneral
0
15.10.2013, 15:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 15:28
Привет! Вот еще темы с ответами:

Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *" - C++
Вот так работает: wchar_t buf; Edit_GetText(hE, buf, sizeof(buf)); if(buf) { wchar_t b; _itow_s(wcscspn(buf, &buf), b, 10); ...

CP886 в Multibyte (wchar_t) и BYTE в Multibyte (wchar_t) - C++
Помогите разобраться с кодировками. Получаю из базы данных значения и при выводи их в EditControl все отлично, но если выводить данные в...

Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| - C++
Ругается на строку Log&lt;&lt;StripXML(__PRETTY_FUNCTION__)&lt;&lt;std::endl;. Функция такая: std::string StripXML ...

класс CString - C++
расскажите пожалуйста, где найти информацию по этому классу?как его подключать, какие функции в нем есть? какую литературу прочесть чтобы в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.