convertir wchar_t en wstring
J'ai l'impression d'enfoncer une porte ouverte, mais je n'ai rien trouvé d'explicite
sur les conversions entre les différents type de chaine unicodes :(
J'ai une application qui récupère un nom de fichier en wchar_t et un module qui ouvre les fichiers et demande un type wstring, et borland c++ 6.0 me dit que le transcodage n'est pas autorisé.
Qui peut m'aider à retrouver :D ?
Resultat de compilation après l'introduction du typdef
Merci pour cette réponse rapide;)
Il y a un changement dans les erreurs de compilation mais le même nombre d'erreurs
ci joint:
[C++ Erreur] DllMain.cpp(41): E2285 Impossible de trouver une correspondance pour '_STL::wstring::basic_string(wchar_t)'
[C++ Erreur] DllMain.cpp(41): E2031 Impossible de transtyper de 'wchar_t' en '_STL::wstring'
C'est bon...pour ce coup ci
Je remercie bien ceux qui m'ont aidé :lol:
et pour ceux qui ont besoin de la solution...:D
C'est un peu touchy au niveau de la syntaxe
Mais c'est comme le chef l'a dit.... des plus simple:yaisse2:
dans l'en tête du fichier je met le typedef:
typedef basic_string<wchar_t> wstring;
dans les variables de ma fonction je déclare ma variable pour le path:
std::wstring WordFile;
puis dans le début du code, j'affecte ma variable
WordFile = FileName;
et après j'ai mon path dans WordFile que je transmet à la fonction suivante
et le compilateur est content
Je reviendrai vous dire si c'est bon à l'exécution
Il faut que je clic sur résolu... je ne sais pas encore le faire:king:
La solution définitive validée
Bonjour
D'abord un grand merci pour toute l'aide que vous m'avez apporté. Tout ce que vous m'avez dit était utile :yaisse2:
J'ai un peu tardé à répondre, car j'ai voulu aller au bout des vérifications.
En conclusion et pour bien documenter de problème dont j'ai vu beaucoup de messages sur le web. Je me propose de décrire mon sujet et l'emploi que j'ai fait des différentes aides que j'ai retiré de cette demande et qui me rend très :D ce soir ou tout a été vérifié.
Je reprend des différents outils dans le domaine du langage naturel:
Un dictionnaire écrit en C et converti en C++ implanté dans une DLL qui ne parle que char;
Un outil de traduction qui parle UNICODE en wstring;
Je suis donc concerné à tous les échanges par les transcodages entre wstring et char. J'ai vite compris qu'il fallait passer par les wchar_t.
J'a
1 pièce(s) jointe(s)
Résultat après vérification
D'abord je remercie tous les contributeurs qui m'ont permis de résoudre mes problèmes:yaisse2:
Ensuite leur dire que toutes les contributions qu'ils m'ont apporté on été positives :D
Enfin je pense que ce sujet est partiellement documenté sur le net et que j'ai maintenant une solution complète faite à partire de ces contributions et d'une autre qui a considérablement aidé sur les transcodages Wchar_t a char de http://www.developpez.net/forums/u72598/medinoc/
ensuite je dois dire que j'ai découvert le besoin qu'avait borland de préfixer tous les déclarations de wstring par std::wstring
Le typdef n'est bien entendu pas utile
Je documente donc la solution et joint le fichier résultat quis est assez modéré et qui comprend tous les transcodages
Instabilité de l'implémentaion
J'ai testé la solution proposés dans une DLL que j'ai mis dans mon précédent message. Elle marche bien
Pour des raisons opérationnelles, j'ai choisi d'implanter dans une même DLL le code du dictionnaire et le code du lecteur Word. et là 8O ca ne marche plus de la même façon. et le résultat fait planter l'ouverture du fichier Word.
Je n'ai rien trouvé sur ce sujet. Je vous recopie ci-après les traces du debugger pour expliquer ma question.
voici d'abord le code tel que je l'ai modifié
J'ai d'abod déclaré le Word File en static et comme pointeur
Code:
static wstring *WordFile;
Puis j'ai un recours à une allocation mémoire
Code:
1 2 3
| IsAllocated = false;
NormFile = ambstowcs( FileName); // alloue un bloc de wchar_t
WordFile = new wstring( NormFile ); |
et j'ai toujours le même résultat après la conversion
Je trouve dans WordFile la valeur suivante:
M_start = :00B47F9C "D:\\usr\\Thèse\\Tailgate\\Spx\\TailgateQuituplets.doc"
M_finish = :00B47FFC ""
et
M_end_of_storage ={"x8000"}
or dans la première implémentation j'avais M_end_of_storage = {""}
C'est la seule différence entre les deux implémentations la première retourne un succès d'ouverture du fichier en deux instructions dans string.c La deuxième effectue 75 instructions+ dans le code de la stl, examine avec attention l'allocator et se plante dans la stl avec EAccessViolation avec le message Violation d'adresse à l'adresse 484B8B lecture de l'adresse 00000048
Je ne sais pas comment mettre l'allocator a NULL
Merci d'avance :king: pour votre aide sur ce pb un peu inhabituel