142 votes

Comment convertir std :: string en LPCWSTR en C ++ (Unicode)

Je cherche une méthode ou un extrait de code pour convertir std :: string en LPCWSTR

155voto

Benny Hilfiger Points 373

La solution est en réalité beaucoup plus facile que les autres suggestions:

 std::wstring stemp = std::wstring(s.begin(), s.end());
LPCWSTR sw = stemp.c_str();
 

Le meilleur de tout, c'est indépendant de la plate-forme. h2h :)

152voto

Toran Billups Points 10012

Merci pour le lien vers l'article MSDN. Ceci est exactement ce que je cherchais.

 std::wstring s2ws(const std::string& s)
{
    int len;
    int slength = (int)s.length() + 1;
    len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
    wchar_t* buf = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
    std::wstring r(buf);
    delete[] buf;
    return r;
}

std::wstring stemp = s2ws(myString);
LPCWSTR result = stemp.c_str();
 

13voto

17 of 26 Points 15941

Si vous êtes dans un environnement ATL / MFC, vous pouvez utiliser la macro de conversion ATL:

 #include <atlbase.h>
#include <atlconv.h>

. . .

string myStr("My string");
CA2W unicodeStr(myStr);
 

Vous pouvez ensuite utiliser unicodeStr en tant que LPCWSTR. La mémoire pour la chaîne unicode est créée sur la pile et libérée, puis le destructeur pour unicodeStr s'exécute.

-2voto

Ed S. Points 70246

Au lieu d'utiliser un std :: string, vous pouvez utiliser un std :: wstring.

EDIT: Désolé, ce n'est pas plus explicatif, mais je dois courir.

Utilisez std :: wstring :: c_str ()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X