A BSTR
es en realidad un WCHAR*
con un prefijo de longitud. El valor BSTR
apunta al comienzo de la cadena, no al prefijo de longitud (que se almacena en los bytes solo "antes" de la ubicación a la que apunta el BSTR
).
En otras palabras, puede tratar un BSTR
como si fuera un const WCHAR*
. Sin conversión necesaria
Entonces, la pregunta es realmente: “¿Cómo puedo convertir una cadena Unicode (WCHAR*
) a un char*
?” Y la respuesta es utilizar la función API ::WideCharToMultiByte
como se explica here. O bien, si está utilizando MFC/ATL en su aplicación, use el ATL and MFC Conversion Macros.
Las cadenas de caracteres estrechas no tienen que ser ASCII. Podrían ser UTF-8, en cuyo caso aún podrá mostrar caracteres que generalmente se consideran anchos, p. Ej. Chino y japonés – CadentOrange
Algunas funciones no tienen una versión ASCII. Por ejemplo, 'Graphics :: DrawString': http://msdn.microsoft.com/en-us/library/ms535991(VS.85).aspx – Default