Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > char* to LPWSTR


Автор: Nick007 14.5.2010, 12:54
всем пиривет

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

если кто знает как это сделать пожалуйсто напишите

Автор: GoldFinch 14.5.2010, 13:11
Код

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

Автор: Nick007 14.5.2010, 14:59
попробовал юзать следующий пример
Код

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, 
у вас случайно рядом нет рабочего примера?

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

Автор: Nick007 14.5.2010, 15:23
строчка с выделением памяти выдавала ошибку
поставил явное преобразование и все зароботало:
Код

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


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)