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

Visual C++ Discussion :

[unicode] Convertir CString en Char[]


Sujet :

Visual C++

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [unicode] Convertir CString en Char[]
    Bonjour,

    Selon toutes les sources que j'ai pu voir, ça devrait être correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    char  *ptr,temp[MAX_LOADSTRING];
    CString strValue;
    ptr = temp;
    ... CODE ...
    if (strValue.GetLength()>0) {
    	SendMessage(hEdtT,EM_SETSEL,TextLen,TextLen); // Placer le curseur à la fin
    	SendMessage(hEdtT,EM_REPLACESEL,0,(LPARAM)(LPCTSTR)strValue); // Ecrit le texte
    	TextLen += strValue.GetLength();
     
    	/*WideCharToMultiByte(CP_ACP,0,strValue,-1,temp,wcslen(strValue)+1,NULL,NULL); // CString->char
    	strValue.Format(L">%s<",temp);
    	SendMessage(hEdtT,EM_SETSEL,TextLen,TextLen); // Placer le curseur à la fin
    	SendMessage(hEdtT,EM_REPLACESEL,0,(LPARAM)(LPCTSTR)strValue); // Ecrit le texte
    	TextLen += strValue.GetLength(); // */
    }
    Le premier affichage marche bien tout seul, mais dès que je met le reste du code (ce qui est commenté) ça pête !

    Pourquoi ça ne marche pas ?
    David.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je croyais avoir déjà répondu à cette question sur WideCharToMultiByte()...

    http://www.developpez.net/forums/sho...46&postcount=3
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Excuses moi...

    Je pensait que le problème était different... (j'essaye d'éclater mon problème)
    En fait, je me rend compte que je suis completement paume.

    Voici mon code pour lire sur le port COM (je suis sous embedded):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    			strValue= L"";
    			while (lirePort(ptr)>0) {
    				//strTmp.Format(L"%s",ptr);
    				//strValue = strValue+strTmp.Format(L"%s",ptr);
    				strValue.operator += (ptr);
    				//strValue.Format(L"%s",ptr);
    				//SendMessage(hEdtT,EM_SETSEL,TextLen,TextLen); // Placer le curseur à la fin
    				//SendMessage(hEdtT,EM_REPLACESEL,0,(LPARAM)(LPCTSTR)strValue); // Ecrit le texte
    				//TextLen += strValue.GetLength();
    			}
    			if (strValue.GetLength()>0) {
    				//sprintf(temp,"");
    				//WideCharToMultiByte(CP_ACP,0,strValue,-1,temp,wcslen(strValue)+1,NULL,NULL); // Convertir CString en char
    				//strValue.Empty();
    				//strValue.Format(L">%d<",strValue.GetLength());
    				SendMessage(hEdtT,EM_SETSEL,TextLen,TextLen); // Placer le curseur à la fin
    				SendMessage(hEdtT,EM_REPLACESEL,0,(LPARAM)(LPCTSTR)strValue); // Ecrit le texte
    				//MessageBox(NULL,strValue,_T("Info2"),MB_OK);
    				//envoiClavier(temp);
    				TextLen += strValue.GetLength();
    			}
    Mais il a un comportement aléatoire... En effet, dès que j'enlève tout ce qu'il y a de commenté... Ca ne marche plus

    C'est de la folie !
    David.

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    En fait, j'aimerais savoir pourquoi ça (sans parler du WideCharToMultiByte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			TextLen = GetWindowTextLength(hEdtT); // Récupère le nombres de caractères dans le EditBox 
    			strValue.operator = ("");
    			while (lirePort(ptr)>0) {
    				strValue.operator += (ptr);
    			}
    			if (strValue.GetLength()>0) {
    				SendMessage(hEdtT,EM_SETSEL,TextLen,TextLen); // Placer le curseur à la fin
    				SendMessage(hEdtT,EM_REPLACESEL,0,(LPARAM)(LPCTSTR)strValue); // Ecrit le texte
     
    			}
    Ne marche plus (ca m'affiche des caractères cabalistiques).
    David.

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    En fait,j'ai peut-être une piste....

    Il ajoute des caractères cabalistique après chaque caractère lu.
    Ca doit être:
    strValue.operator += (ptr);
    Qui ne concatène pas bien (il ne doit pas terminer la chaine).

    Si je fait:
    strTemp.Format(L"%s",ptr);
    strValue = strValue+strTemp;
    C'est encore pire...

    Comment concatener une Cstring et un char* sans utiliser 50 variables tampon (j'ai déjà cherché pas mal...) ?
    David.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tes caractères cabalistiques, ils ne seraient pas aux endroits de changements de ligne?

    Sous Windows, le texte d'une EditBox est supposé être au format DOS : En clair, les retours de ligne se font par \r\n...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bin non,

    Ils sont entre chaque caractères lus (c'est toujours la même suite d'une dizaine de caractère).

    Exemple:
    Si il y a BONJOUR sur le port COM, ça fait:
    B+*$*µ!][]°#&°O+*$*µ!][]°#&°N+*$*µ!][]°#&°J+*$*µ!][]°#&°O+*$*µ!][]°#&°U+*$*µ!][]°#&°R+*$*µ!][]°#&°
    Enfin, il y a des caractères que je ne peux écrire...
    David.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu es sûr que ta fonction lireport() met correctement le zéro terminal?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Convertir CString en const char*: ca marche pas
    Par MDiabolo dans le forum Visual C++
    Réponses: 12
    Dernier message: 21/11/2006, 18h10
  2. Convertion CString en char *
    Par Bmagic dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 16h09
  3. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42
  4. Convertir String en Char: comment?
    Par nmathon dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2005, 20h58
  5. Réponses: 13
    Dernier message: 06/03/2005, 15h21

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