С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/37: Рейтинг темы: голосов - 37, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 2
1

String в wchar_t*

27.02.2015, 14:07. Показов 7184. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Вопрос уже изъезжен давно, но я уже 2 недели "курю" этот форум, но так и не смог выполнить довольно простую задачку:
вот это openFileDialog1->FileName возвращает тип string, а вот это FindFirstFileE(lpFileName) - принимает wchar_t*.
Как их подружить? Что бы получить это:

C++
1
2
lpFileName = openFileDialog1->FileName;//string
FindFirstFileE(lpFileName);//wchar_t*
Как сделать преобразовать lpFileName в wchar_t*

Пример: выбрал в диалоговом окне путь к папке, переменная openFileDialog1->FileName имеет тип string, и значение этой переменной нужно передать в поиск фалов FindFirstFileE(lpFileName), при этом переменная lpFileName должна быть указателем wchar_t*...

Добавлено через 15 минут
Делаю это в VC++ 2013
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 14:07
Ответы с готовыми решениями:

String to wchar_t
День всем добрый. Уже пролазил весь интернет, и ничего не понял. Вся надежда на вас. У меня...

wchar_t в string
Собственно, как можно преобразовать wchar_t* в string?

Преобразование из wchar_t в string
Здравствуйте! Подскажите, пожалуйста, каким образом можно преобразовать объект типа wchar_t в...

Преобразовать string в wchar_t
Подскажите как переобразовать string в wchar вот код wchar_t buffer; string s2 = "10 20 30 40...

5
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.02.2015, 14:13 2
Пробуйте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
std::wstring StrToWstr(const std::string &aString)
{
    // чтобы не делать каждый раз new создадим некоторый буфер заранее
    const int maxSize = 1024 * 1024; // 1Мб символов
    static wchar_t buff[maxSize]; 
 
    int nSize = ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), NULL, NULL);
 
    wchar_t *tBuff = buff;
    if (nSize > maxSize )
    {
        // пытаемся выделить память только если не хватило
        tBuff = new wchar_t[nSize];
    }
    if (nSize <= 0 && tBuff == NULL)
        return L"";
        
    ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), buff, nSize);
        
    std::wstring result(tBuff);
 
    if (tBuff != buff )
        delete[] tBuff;
 
    return result;
}
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
27.02.2015, 14:17 3
C++
1
2
lpFileName = openFileDialog1->FileName;//string
FindFirstFileE(lpFileName.c_str());//wchar_t
Ну или смотри ссылки
https://msdn.microsoft.com/en-... z5(v=vs.80)
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 2
27.02.2015, 15:01  [ТС] 4
MrGluck:Спасибо!
вызываю так:

C++
1
2
std::string c = "C:\\*.*";
wchar_t* m = StrToWstr(c);
Не получается:выдал ошибку: не существует подходящей функции преобразования из "std::wstring" в "wchar_t*"

Добавлено через 8 минут
Переделал, получилось! Спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
wchar_t* StrToWstr(const std::string &aString)
{
    // чтобы не делать каждый раз new создадим некоторый буфер заранее
    const int maxSize = 1024 * 1024; // 1Мб символов
    static wchar_t buff[maxSize];
 
    int nSize = ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), NULL, NULL);
 
    wchar_t *tBuff = buff;
    if (nSize > maxSize)
    {
        // пытаемся выделить память только если не хватило
        tBuff = new wchar_t[nSize];
    }
    if (nSize <= 0 && tBuff == NULL)
        return L"";
 
    ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), buff, nSize);
 
    wchar_t* result(tBuff);
 
    if (tBuff != buff)
        delete[] tBuff;
 
    return result;
}
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.02.2015, 16:14 5
Я не понял, а откуда utf8 у тебя берётся? Это openFileDialog1->FileName - из .NET?
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.02.2015, 16:24 6
Цитата Сообщение от olbu Посмотреть сообщение
Не получается:
У полученного объекта std::wstring в местах, где нужно получить wchar_t*, вызывайте метод c_str(). Само хранение лучше осуществлять в std::wstring.
0
27.02.2015, 16:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2015, 16:24
Помогаю со студенческими работами здесь

Из wchar_t* в wstring или в string
Как перевести из wchar_t* в wstring или в string ? Почему столько геморроя со строками... Есть...

Замена wchar_t на class string?
можно ли заменить. wchar_t filePathName; на, или что-то вроде. std::wstring filePathName; при...

По поводу wchar_t, wstring, char, string и кодировок
Здравствуйте, пишу консольную либу которая будет работать с большим количеством символов в разных...

Конвертор из wchar_t to string. Ошибка косвенного обращения.
Вот код, Ошибки: Ошибка 3 error C2040: temp: &quot;std::string&quot; отличается по уровням косвенного...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru