Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 11:42     Конвертация Cstring в wchar_t* #1
Есть функция, которая возвращает тип CString и нужно этот CString использовать в функции wcscpy. Как правильно сделать преобразования?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 11:42     Конвертация Cstring в wchar_t*
Посмотрите здесь:

C++ Конвертация в wchar_t
fgets и CString C++
класс CString C++
C++ <cstring> strlen() C++
Wchar_t C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
15.10.2013, 11:48     Конвертация Cstring в wchar_t* #2
1. У тебя проект-то какой - уникодный или нет?
2. Приведи пример кода, будет легче дать правильный совет.
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 12:03  [ТС]     Конвертация Cstring в wchar_t* #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));
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
15.10.2013, 12:21     Конвертация Cstring в wchar_t* #4
А если прогнать в char* и обратно?
У CString вроде был аналог string::data()
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
15.10.2013, 12:45     Конвертация Cstring в wchar_t* #5
Так вот вопрос-то: у тебя проект уникодный или нет? Потому что если уникодный - то и делать ничего не надо, у класса CString есть operator LPCTSTR(), возвращающий const TCHAR*, который раскроется в const wchar_t*. А если проект не уникодный, то у меня сразу же возникает вопрос: почему применяется функция wcscpy, а не strcpy ? Какие к тому основания?
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 13:11  [ТС]     Конвертация Cstring в wchar_t* #6
MrGluck, а можно элементарный пример.
CheshireCat, проект уникодный, но с оператором LPCTSTR() почему-то не работает
SatanaXIII
15.10.2013, 13:19
  #7

Не по теме:

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

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

linkoln78, а приведи-ка минимальный код, воспроизводящий проблему.
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 14:35  [ТС]     Конвертация Cstring в wchar_t* #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));
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
15.10.2013, 14:44     Конвертация Cstring в wchar_t* #10
Цитата Сообщение от linkoln78 Посмотреть сообщение
Проект использует многобайтную кодировку. не уникодную, извиняюсь
О! Вот в этом и может быть дело....
Попробуй порыться в MSDN, начиная вот отсюда: http://msdn.microsoft.com/ru-ru/libr...=vs.90%29.aspx
linkoln78
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 102
15.10.2013, 15:07  [ТС]     Конвертация Cstring в wchar_t* #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);
Как сделать такие же преобразования в мульти байт не могу понять
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2013, 15:28     Конвертация Cstring в wchar_t*
Еще ссылки по теме:

Cannot convert from 'wchar_t' to 'const wchar_t *' C++
Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| C++
C++ Конвертация wchar_t в число целого типа. Обработка исключения

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
15.10.2013, 15:28     Конвертация Cstring в wchar_t* #12
А MSDN и гугл на что? Используй функции MultiByteToWideChar и WideCharToMultiByte. Примеры кода тоже есть, можно начать отсюда: http://social.msdn.microsoft.com/For...orum=vcgeneral
Yandex
Объявления
15.10.2013, 15:28     Конвертация Cstring в wchar_t*
Ответ Создать тему
Опции темы

Текущее время: 16:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru