Question

Y a-t-il une méthode? Mon ordinateur est AMD64.

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

Quand j'ai utilisé:

loadU(&str);

le compilateur VS2005 dit:

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

Comment puis-je le faire?

Était-ce utile?

La solution

Si vous avez un objet std :: wstring, vous pouvez appeler c_str () dessus pour obtenir un wchar_t * :

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

Étant donné que vous travaillez sur une chaîne étroite, vous devez d'abord l'élargir. Il y a différentes options ici; L’un consiste à utiliser le MultiByteToWideChar . Cela vous donnera un LPWSTR , ce qui équivaut à wchar_t * .

Autres conseils

Convertissez-le d'abord en std :: wstring:

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

Ensuite, obtenez la chaîne C:

const wchar_t* widecstr = widestr.c_str();

Ceci ne fonctionne que pour les chaînes ASCII, mais cela ne fonctionnera pas si la chaîne sous-jacente est codée en UTF-8. L’utilisation d’une routine de conversion telle que MultiByteToWideChar () permet de gérer correctement ce scénario.

Vous pouvez utiliser les macros de conversion de texte ATL pour convertir une chaîne étroite (char) en chaîne large (wchar_t). Par exemple, pour convertir un std :: string:

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

Vous pouvez également spécifier une page de code. Si votre std :: string contient des caractères UTF-8, vous pouvez utiliser:

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

Très utile mais uniquement sous Windows.

Si vous êtes sous Linux / Unix, examinez mbstowcs () et wcstombs () définis dans GNU C (à partir d’ISO C 90).

  • mbs signifie "Chaîne d'octets multiples". et est fondamentalement la chaîne C terminée par un zéro habituelle.

  • wcs signifie Wide Char String et est un tableau de wchar_t.

Pour plus d'informations sur les caractères larges, consultez la documentation de glibc ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top