Comment convertir std::string en LPCWSTR en C++ (Unicode)
Je suis à la recherche d'une méthode, ou d'un fragment de code pour la conversion de std::string en LPCWSTR
- Comment pouvons-nous faire l'inverse?
- Je suis venu de google en essayant de faire le contraire. N'avez-vous pas trouver une méthode?
Vous devez vous connecter pour publier un commentaire.
Merci pour le lien vers l'article de MSDN. C'est exactement ce que je cherchais.
wstring
que la mémoire tampon, et couper l'intermédiairechar
,std::wstring
utilisationwchar_t
.MAX_INT
de long. 3. Ets2ws()
ne pas traiter des NULs, pas que c'est important dans le cas d'utilisation.La solution est en fait beaucoup plus facile que tous les autres suggestions:
Le meilleur de tous, il est indépendant de la plateforme. h2h 🙂
reinterpret_cast
. Ce code ne fonctionne pas. Ne pas l'utiliser..char
s sont pour la plupart de l'octet unique et les gens qui la recherche sur cette question sont à la recherche à la Winapi, évidemment,\.char
est généralement encodé en ANSI. Avec le codage ANSI, les valeurs de 128 à 255 sont interprétés à l'aide de la page de codes active. Bousculer ces valeurs dans unwchar_t
(UTF-16 sur Windows) ne produira pas le résultat souhaité. Si vous voulez être précis, cela fonctionne exactement de 50% des cas. La prise de caractère DBCS encodage en compte, ce pourcentage diminue encore.Si vous êtes dans un ATL/MFC de l'environnement, Vous pouvez utiliser de l'ATL de la macro de conversion:
Vous pouvez ensuite utiliser unicodeStr comme un LPCWSTR. La mémoire de la chaîne unicode est créé sur la pile et relâché, le destructeur pour unicodeStr exécute.
Au lieu d'utiliser un std::string, vous pouvez utiliser un std::wstring.
EDIT: Désolé, ce n'est pas plus explicite, mais je dois courir.
Utiliser std::wstring::c_str()
LPCWSTR lpcwName=std::wstring(strname.begin(), strname.end()).c_str()