web-dev-qa-db-fra.com

Conversion de TCHAR en chaîne en C ++

J'essaie de convertir un TCHAR en une chaîne comme dans:

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

Je dois définir mypath sur celui de path. J'ai fait une boucle simple et concaténé path[index] à mypath et cela fonctionne mais je n'aime pas de cette façon.

Je suis nouveau en C++ mais j'ai fait beaucoup de C #. J'ai vu des exemples de GetModuleFileName qui passent dans un "char" mais ça n'aime pas ça. Il a besoin du TCHAR ou d'un LPWSTR.

19
David

TCHAR est une macro définie en tant que char ou wchar en fonction de la définition de votre jeu de caractères. Par défaut après 2008, le jeu de caractères est unicode. ce code fonctionne si vous modifiez votre jeu de caractères.

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* bob ="hi";
    string s = bob;    
}

Faites un clic droit sur les paramètres du projet et modifiez le suivi

enter image description here

si vous souhaitez utiliser TCHAR comme jeu de caractères Unicode, utilisez wstring

23
rerun

Quand j'ai vraiment besoin de le faire, j'utilise ce qui suit:

TCHAR  infoBuf[32767]
GetWindowsDirectory(infoBuf, 32767); 
//Let's convert to string...
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.

J'espère que cela pourra aider.

9
OhadM

Si vous voulez le chemin en caractères, vous devez appeler GetModuleFilenameA. Cette fonction prend LPSTR au lieu de LPTSTR.

Notez que presque toutes les fonctions Win32 qui prennent ou retournent des chaînes ont deux versions, l'une se terminant par A (ANSI?) Et l'autre se terminant par W (large).

8
avakar

Vous pouvez également convertir à partir de _TCHAR* à char* en utilisant wcstombs ou wcstombs_s une fonction

http://msdn.Microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx

5
nuoritoveri