IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

convertir wchar_t en wstring


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut 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 ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour et bienvenu,
    Normalement, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef basic_string<wchar_t> wstring;
    . Donc tu ne devrais pas avoir à convertir ! Que dit le compilateur?

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut 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'

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Il doit te manquer un flag de compil pour utiliser la STL avec wchar_t. Je ne connais pas borland c++ 6.0 et la version de la STL qu'il utilise, donc je ne peux te dire lequel. En général, jette un coup d'œil aux fichiers d'en-tête, celui-ci devrait t'apparaitre rapidement.

  5. #5
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut C'est bon...pour ce coup ci
    Je remercie bien ceux qui m'ont aidé
    et pour ceux qui ont besoin de la solution...
    C'est un peu touchy au niveau de la syntaxe
    Mais c'est comme le chef l'a dit.... des plus simple

    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

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,
    Je ne pense pas que ta solution en soit une. Avec ton typedef, tu redéfinis un type qui est sensé exister.
    C'est une bidouille qui contourne le problème dans ce cas précis (donc déjà pas génial), mais je mets ma main à couper que tu rencontreras d'autres problèmes.
    Le mieux reste de vérifier comment la STL est prise en charge dans ton compilateur.
    Bon courage.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Spout Voir le message
    Salut,
    Je ne pense pas que ta solution en soit une. Avec ton typedef, tu redéfinis un type qui est sensé exister.
    C'est une bidouille qui contourne le problème dans ce cas précis (donc déjà pas génial), mais je mets ma main à couper que tu rencontreras d'autres problèmes.
    Le mieux reste de vérifier comment la STL est prise en charge dans ton compilateur.
    Bon courage.
    Je partage cet avis. Comme indiqué plus haut, il doit te manquer un flag de compil pour intégrer l'unicode à la STL.

  8. #8
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut Ce n'est pas fini
    Citation Envoyé par JeanNoel53 Voir le message
    Je remercie bien ceux qui m'ont aidé
    et pour ceux qui ont besoin de la solution...
    C'est un peu touchy au niveau de la syntaxe
    Mais c'est comme le chef l'a dit.... des plus simple

    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

  9. #9
    Membre extrêmement actif
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Par défaut 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à 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    static wstring *WordFile;
    Puis j'ai un recours à une allocation mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 pour votre aide sur ce pb un peu inhabituel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir des wchar_t en byte (unsigned char)
    Par teddyalbina dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2011, 11h26
  2. Réponses: 3
    Dernier message: 18/06/2009, 18h30
  3. Réponses: 5
    Dernier message: 05/09/2008, 17h26
  4. Convertir wstring en char
    Par Contrec dans le forum C++
    Réponses: 16
    Dernier message: 07/08/2008, 17h54
  5. Convertir QString en wchar_t*
    Par jerome71300 dans le forum Débuter
    Réponses: 4
    Dernier message: 09/04/2008, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo