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 �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    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 ?

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    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 !

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    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).

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    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...) ?

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    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...

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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