Bonjour,
Pas moyen de trouver comment convertir un std::string en LPCWSTR...
J'ai essayé de le caster :
mais ça ne fonctionne pas :cry:...Code:LPCWSTR lpFileName = (TCHAR*)fileName.c_str();
Cordialement,
Rodrigue
Version imprimable
Bonjour,
Pas moyen de trouver comment convertir un std::string en LPCWSTR...
J'ai essayé de le caster :
mais ça ne fonctionne pas :cry:...Code:LPCWSTR lpFileName = (TCHAR*)fileName.c_str();
Cordialement,
Rodrigue
...en fait ce serait même en LPCTSTR! C'est le nom du fichier passé dans la méthode CreateFile.
Quand je faisje récupère un const char*Code:fileName.c_str()
A priori c'est bien d'un const char* dont tu as besoin, tu ne devrais pas avoir de problème -- à moins que tu ne sois en unicode, mais dans ce cas il faut travailler avec des std::wstring.
Ah zut! Je ne sais pas je suis en C++/CLI. Je ne me soucie pas de ce genre de chose (p-e que je devrais 8O). Sinon j'ai trouvé deux solutions :D:
Pour mes classes, je pense que c'est mieux d'utiliser std::string plutôt que std::wstring non ?
- Utiliser CreatFileA (au lieu de CreateFileW utilisé normalement)
- Faire une conversion:
Code:
1
2
3
4 //ANSI->Unicode int Size = MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, NULL, 0); LPWSTR wUnicode = new WCHAR[Size]; MultiByteToWideChar (CP_ACP, 0, szAnsi, -1, wUnicode, Size);
Clairement, oui, tu devrais... C'est un peu comme si tu ne savais pas si tu faisais du C ou du C++ (remarque, ça arrive parfois aussi).Citation:
Envoyé par Rodrigue
Si c'est CreateFileW qui est utilisé alors tu es en unicode, et il faut donc gérer les chaînes en unicode. Si tu ne veux pas de l'unicode alors désactive-le simplement.Citation:
Envoyé par Rodrigue
Si tu utilisais std::wstring tu n'en aurais pas besoin.Citation:
Envoyé par Rodrigue
Ben si tu es en unicode il faudra gérer des chaînes unicodes, et les chaînes unicode c'est wstring pas string. Mais ça ne change rien, c'est la même classe, sauf qu'elle manipule des caractères "longs".Citation:
Envoyé par Rodrigue
Qu'est-ce qui est le mieux? Unicode ou Ansi. Je pense que l'Unicode gère tous les caractères (même chinois etc.) ?
Oui, ça sert à ce genre de choses.Citation:
Je pense que l'Unicode gère tous les caractères (même chinois etc.) ?
Donc en fait en général, pour être à même de pouvoir traiter tous les cas, il vaut mieux privilégier std::wstring que std::string :P
Merci pour ces informations fort utiles!
Non, seulement si tu es en unicode. Si tu n'es pas en unicode, tu auras des problèmes car wstring ne te renverra pas des const char*.Citation:
Envoyé par Rodrigue
Ok merci! En fait il faudrait, pour être le plus général possible, que mes fonctions implémentent l'ANSI et l'UNICODE. Les parties du programme concernées seraient choisies en fonction d'une directive de compilation...
Code:typedef std::basic_string<TCHAR> t_string;
Ah ouais pas bête du tout :D ! Merci :king: