Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> char* to LPWSTR, конвертация char* в LPWSTR  
V
    Опции темы
Nick007
Дата 14.5.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.4.2010
Где: СССР

Репутация: нет
Всего: нет



всем пиривет

передо мною не первый раз стоит задача
сконвертировать char* в lpwstr

если кто знает как это сделать пожалуйсто напишите
PM MAIL WWW   Вверх
GoldFinch
Дата 14.5.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



Код

int MultiByteToWideChar(
  UINT CodePage,
  DWORD dwFlags,
  LPCSTR lpMultiByteStr,
  int cbMultiByte,
  LPWSTR lpWideCharStr,
  int cchWideChar
);

PM MAIL ICQ   Вверх
Nick007
Дата 14.5.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.4.2010
Где: СССР

Репутация: нет
Всего: нет



попробовал юзать следующий пример
Код

LPWSTR utf8_to_unicode(char *utf8_string)
{
    int err;
    LPWSTR  res;
    int res_len = MultiByteToWideChar(
        CP_UTF8,            // Code page
        0,                    // No flags
        utf8_string,        // Multibyte characters string
        -1,                    // The string is NULL terminated
        NULL,                // No buffer yet, allocate it later
        0                    // No buffer
        );
    if (res_len == 0) 
    {
        MB(L"Failed to obtain utf8 string length\n");
        return NULL;
    }
    /*/res = calloc(sizeof(wchar_t), res_len);
    if (res == NULL) 
    {
        MB(L"Failed to allocate unicode string\n");
        return NULL;
    }*/
    err = MultiByteToWideChar(
        CP_UTF8,            // Code page
        0,                    // No flags
        utf8_string,        // Multibyte characters string
        -1,                    // The string is NULL terminated
        res,                // Output buffer
        res_len*2                // buffer size//
        );
    if (err == 0)
    {
        MB(L"Failed to convert to unicode\n");
        free(res);
        return NULL;
    }
    return res;
}

LPWSTR wch;
char* ach={"test dir"};
wch=utf8_to_unicode(ach);

во время выполнения второго экземпляра MultiByteToWideChar
приложение обрывается

GoldFinch, 
у вас случайно рядом нет рабочего примера?

Это сообщение отредактировал(а) Nick007 - 14.5.2010, 15:15
PM MAIL WWW   Вверх
Alexeis
Дата 14.5.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



Nick007, выделять память нужно для строк. Функция MultiByteToWideChar не выделяет сама память, а требует указатели на выделенные буферы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Nick007
Дата 14.5.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 13.4.2010
Где: СССР

Репутация: нет
Всего: нет



строчка с выделением памяти выдавала ошибку
поставил явное преобразование и все зароботало:
Код

    res =(LPWSTR) calloc(sizeof(wchar_t), res_len);


всем (GoldFinch и Alexeis) огромное спосибо

Это сообщение отредактировал(а) Nick007 - 17.5.2010, 17:26
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.