Если вы вводите BSTR
(как кажется), то данные уже являются Unicode, и вы можете просто привести их к wstring
следующим образом. _bstr_t
имеет неявные преобразования как char*
, так и wchar*
, что исключает необходимость ручного преобразования кода Win32.
if (url->bstrVal)
{
// true => make a new copy - can avoid this if source
// no longer needed, by using false here and avoiding SysFreeString on source
const _bstr_t wrapper(url->bstrVal, true);
std::wstring wstrVal((const _wchar_t*)wrapper);
}
См. здесь для получения более подробной информации об этой области использования Windows. В этой области легко испортить использование Win32 API - использование оболочки BSTR позволяет избежать как копирования данных (при разумном использовании), так и сложности кода.