A BSTR
на самом деле является WCHAR*
с префиксом длины. Значение BSTR
указывает на начало строки, а не на префикс длины (который хранится в байтах только «до» местоположения, на которое указывает BSTR
).
Другими словами, вы можете лечить BSTR
, как если бы это const WCHAR*
. Преобразование не требуется.
Так что ваш вопрос действительно: «Как я могу преобразовать строку Unicode (WCHAR*
) в char*
?» И ответ должен использовать функцию ::WideCharToMultiByte
API, как описано here. Или, если вы используете MFC/ATL в своем приложении, используйте ATL and MFC Conversion Macros.
Узкие строки символов не обязательно должны быть ASCII. Они могут быть UTF-8, и в этом случае вы все равно сможете отображать символы, которые обычно считаются широкими, например. Китайский и японский. – CadentOrange 2010-11-29 10:19:37