преобразование string (char*) в wstring (wchar_t*) осложняется тем, что необходимо учитывать кодовую страницу исходной строки. На иностранных ресурсах в основном представлено решение с использованием wstring_convert, но оно не работает для русской кодировки, поскольку на самом деле, это перекодировка из utf-8 (который для латиницы совпадает с ANSI) в unicod.
Работает следующее решение, основанной на widen.
char buffer[100] = "привет, мир";
//char buffer[100] = "hello, world";
// обозначение локали зависит от реализации,
// "rus" подходит для VC++
//locale loc("rus");
locale loc(""); //используем глобальную локаль
ctype<wchar_t> const &facet = use_facet<std::ctype<wchar_t>>(loc);
int bufferLen = strlen(buffer);
//std::vector<wchar_t> result(lenBuffer);
wchar_t wBuffer[100];
bool result1 = facet.widen(buffer, buffer + bufferLen, &wBuffer[0]) != 0;
wBuffer[bufferLen] = '\0';
//return std::wstring(result.begin(), result.end());
wstring wstr(wBuffer);