Pregunta

¿Hay algún método? Mi computadora es AMD64.

::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);

Cuando utilicé:

loadU(&str);

el compilador VS2005 dice:

Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'

¿Cómo puedo hacerlo?

¿Fue útil?

Solución

Si tiene un objeto std :: wstring, puede llamar a c_str () para obtener un wchar_t * :

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

Sin embargo, dado que está operando en una cadena estrecha, primero deberá ampliarla. Hay varias opciones aquí; una es usar el MultiByteToWideChar rutina. Eso te dará un LPWSTR , que es equivalente a wchar_t * .

Otros consejos

Primero conviértelo a std :: wstring:

std::wstring widestr = std::wstring(str.begin(), str.end());

Luego obtén la cadena C:

const wchar_t* widecstr = widestr.c_str();

Esto solo funciona para cadenas ASCII, pero no funcionará si la cadena subyacente está codificada en UTF-8. El uso de una rutina de conversión como MultiByteToWideChar () garantiza que este escenario se maneje correctamente.

Puede usar las macros de conversión de texto ATL para convertir una cadena estrecha (char) en una ancha (wchar_t). Por ejemplo, para convertir un std :: string:

#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);

También puede especificar una página de códigos, por lo que si su serie std :: string contiene caracteres UTF-8, puede usar:

CA2W pszWide(str.c_str(), CP_UTF8);

Muy útil pero solo para Windows.

Si está en Linux / Unix, eche un vistazo a mbstowcs () y wcstombs () definidas en GNU C (de ISO C 90).

  • mbs significa " Cadena de múltiples bytes " y es básicamente la cadena C terminada en cero habitual.

  • wcs significa Wide Char String y es una matriz de wchar_t.

Para obtener más información de fondo sobre los caracteres anchos, consulte la documentación de glibc aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top