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

MFC Discussion :

[MFC] Problème de conversion CString vers Char *


Sujet :

MFC

  1. #1
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 425
    Points
    425
    Par défaut [MFC] Problème de conversion CString vers Char *
    Bonjour,

    J’ai un petit problème de conversion de type Cstring vers char *

    En faite actuellement je récupère cette var comme ceci : CString(V_BSTR(&pVDir)
    Ou &pVDir est du type :
    Je dois donc convertir CString(V_BSTR(&pVDir) ceci en char * puisqu’il doit être envoyé dans une autre fonction qui écrit un fichier batch, or pour l’instant sans conversion le fichier est créer mais le chemin (pVDir) est vide.

    Merci de votre aide,
    Cordialement.

    Ps : j’ai regardé ce lien mais il ne m’a pas vraiment aider (il est possible que je ne comprenne pas son fonctionnement aussi :/)

  2. #2
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Je n'ai pas exactement compris, mais si c'est convertir un VARIANT vers un CString, je ferais un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString sDir = (LPCTSTR)(_bstr_t)_variant_t(pVDir);

  3. #3
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 425
    Points
    425
    Par défaut
    Bonjour,

    Non je n'ai pas besion de convertir le VARIANT vers un CString, c'est déjà fait mais de convertir un CString en char * (ou si il existe une conversion VARIANT vers un char *)

    En faite j'ai une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infolot = new InfoLot(("X", "Y");
    Ou X et Y doivent être de type char *

    X correspond CString(V_BSTR(&pVDir) et Y a CString(V_BSTR(&pVCmd). Cependant &pVDir et &pVCmd sont de type VARIANT.

    Voila ce que j'ai fait c'est un peu bourrin (et certainement faux) mais ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    						char *test; 
    						test == CString(V_BSTR(&pVDir));
     
    						infolot = new InfoLot((char *) test, "");
    Pour l'instant je n'ai pas encore réussi a récupérer &pVCmd

    Merci de ton aide,
    Cordialement.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    pour une CString en Char * voir fonction CString::GetBuffer.

  5. #5
    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
    Pour un const char * par contre, ça se fait tout seul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString csTest = "Coucou";
    const char *sczChaine = csTest;
    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.

  6. #6
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 425
    Points
    425
    Par défaut
    Bonjour,

    Merci farscape & Médinoc , Je vais regarder ça .

    .: Edit :.
    @Médinoc: Voila ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    						CString(V_BSTR(&pVDir));
    						char *sczChaine = V_BSTR(&pVDir);
    Voila ce que j'obtient:
    C:\Program Files\Microsoft Visual Studio\MyProjects\Stagiaire\Reconstruction\ReconstructionDlg.cpp(712) : error C2440: 'initializing' : cannot convert from 'unsigned short *' to 'char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    *Note: Je n'y connai rien en C++ je commence juste le C a l'école..

  7. #7
    Membre actif Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Points : 288
    Points
    288
    Par défaut
    Citation Envoyé par Darkenshin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    						CString(V_BSTR(&pVDir));
    						char *sczChaine = V_BSTR(&pVDir);
    Pour faire ce que tu veux, il faut créer une variable de type CString puis faire un GetBuffer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CString sTmp((LPCTSTR)_bstr_t(V_BSTR(&pVDir)));
    char* szChaine = sTmp.GetBuffer(1);
    ...
    sTmp.ReleaseBuffer();

  8. #8
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 425
    Points
    425
    Par défaut
    Merci Grulim, je vais regarde ça

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    vu l'erreur tu dois etre en UNICODE .
    j'utiliserais LPTSTR .

  10. #10
    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
    farscape: Vu l'erreur, c'est ce que je pense aussi.

    Dans ce cas, le GetBuffer ne devrait pas marcher non plus avec un char *... Ici, il faudra utiliser un LPCTSTR pour la conversion const directe ou un LPTSTR pour le GetBuffer...
    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.

  11. #11
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 425
    Points
    425
    Par défaut
    Un Grand Merci à vous tous.

    Voila ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CString sDir = V_BSTR(&pVDir); 
    char* szDoss = sDir.GetBuffer(1); 
     
    CString sCmd = V_BSTR(&pVCmd); 
    char* szCommand = sCmd.GetBuffer(1); 
     
    infolot = new InfoLot((char *)sDir.GetBuffer(1), (char *)sCmd.GetBuffer(1));
    m_lots.SetItemDataPtr(index,(void *)infolot);
     
    sDir.ReleaseBuffer();
    sCmd.ReleaseBuffer();
    Enfin le programme est assez complexe certaine conversion sont déjà faites dans d'autre fichier qui pointes sur d'autres varriables ect.. donc de temps en temps il y a des bug même ave ce que vous de donner.

    Ce problème est résolu .

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/08/2010, 12h49
  2. Réponses: 1
    Dernier message: 17/06/2009, 18h18
  3. [MFC] pb de conversion CString en unsigned short
    Par kanabzh29 dans le forum MFC
    Réponses: 5
    Dernier message: 04/05/2006, 10h29
  4. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  5. [VC 2005][MFC] Problème affichage constenu CString
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 13/12/2005, 09h22

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