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
.
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
si vous souhaitez utiliser TCHAR comme jeu de caractères Unicode, utilisez wstring
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.
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).
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