//Конвертирование из Char* в LPWSTR
LPWSTR CharToLPWSTR(LPCSTR char_string)
{
LPWSTR res;
DWORD res_len = MultiByteToWideChar(1251, 0, char_string, -1, NULL, 0);
res = (LPWSTR)GlobalAlloc(GPTR, res_len);
MultiByteToWideChar(1251, 0, char_string, -1, res, res_len);
return res;
}
Конвертирование из Char* в LPWSTR
У меня небольшая проблемка с конвертированием строк из char* в LPWSTR.
Есть такая функция:
Код:
Но проблема заключается в том, что если конвертируемая строка длиннее, по-моему, 10 символов, то возникает исключение. Что-то я сам не разобрался, почему длина конвертируемой строки так сильно ограничена.
В крайнем случае, конечно, можно конвертируемую строку разбивать на куски по 10 символов, а потом склеивать результаты конвертирования. Но я думаю, это будет на самый оптимальный вариант. Хотелось бы узнать мнение общественности по этому вопросу.
Number of bytes to allocate.
А у тебя res_len - длина в символах. Да еще забыл место под конечный NULL.
В результате:
res = (LPWSTR)GlobalAlloc(GPTR, (res_len + 1) * sizeof(WCHAR));
Using the MultiByteToWideChar function incorrectly can compromise the security of your application. Calling the MultiByteToWideChar function can easily cause a buffer overrun because the size of the In buffer equals the number of bytes in the string, while the size of the Out buffer equals the number of WCHARS. To avoid a buffer overrun, be sure to specify a buffer size appropriate for the data type the buffer receives. For more information, see Security Considerations: International Features.
длина WCHAR больше 1 байта. Ты выделяешь маленький буффер.Выделяй с учетом размера WCHAR. Все-ж написано в MSDN :)