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 :

Convertir CString en const char*: ca marche pas


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par d�faut Convertir CString en const char*: ca marche pas
    Bonjour,

    Voil� maintenant un bon moment que je me prends la t�te sur �a. Je d�couvre les CString et �a m'�nerve. Apr�s �tre all� sur la FAQ et d'autres trucs ca ne marche toujours pas.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    CString path= dlg.GetPathName();  // contain the selected filename
    	const char* temp = path.GetBuffer();
    	CvCapture* cvCreateFileCapture(temp);
    Quand je compile j'obtiens une erreur du genre:
    error C2440: 'initialisation' : impossible de convertir de 'const char *' en 'CvCapture *'


    Merci d'avance pour votre aide.

  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
    Une erreur du genre ou cette erreur-l� ?

    Car l�, ce n'est pas la conversion de CString vers const char * qui foire: c'est autre chose...
    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
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    Bonjour,

    je ne sais pas si l'erreur vient de l�, mais le code suivant est incorrect:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CvCapture* cvCreateFileCapture(temp);
    Je ne sais pas ce que te renvoie cvCreateFileCapture, mais � prioris, c'est un CvCapture*. Dans ce cas le code suivant, serait plus juste:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CvCapture* myCvCapture = cvCreateFileCapture(temp);
    Hope it helps.

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    d'apr�s ton erreur, le constructeur suivant n'existe pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CvCapture(const char *strChaine);
    seul le constructeur de copie existe !!! je ne vois donc pas comment g�rer ton erreur si tu ne nous donnes pas plus de precision

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par d�faut
    Merci autant pour moi... mon erreur �tait bien au niveau du constructeur (comme vous me l'avez signal�).
    Normalement avec un GetString() ca doit marcher non ?

  6. #6
    Membre exp�riment� Avatar de Rupella
    Inscrit en
    F�vrier 2005
    Messages
    286
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 286
    Par d�faut
    Potientiellement dangeureux. Tu peux utiliser le cast en const char * avec :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    cvCreateFileCapture((LPCTSTR)path);

  7. #7
    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 ne vois pas en quoi GetString() est plus "potentiellement dangereux" qu'un cast de type C en const TCHAR *...
    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.

  8. #8
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    euhh d'apres ce que je vois c'est pas la CString qui pose pb !!!!!!!

    c'est que le param�tre est bien un const char * mais il attends une capture c'est tout

  9. #9
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par d�faut
    Citation Envoy� par M�dinoc
    Je ne vois pas en quoi GetString() est plus "potentiellement dangereux" qu'un cast de type C en const TCHAR *...
    parce que qui dit GetString (je suppose GetBuffer) dit ReleaseBuffer (souvent oubli�) et que dans la signature du CString le cast en LPCTSTR est pr�vu (cf msdn)

    donc pourquoi faire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CString path= dlg.GetPathName();  // contain the selected filename
    	const char* temp = path.GetBuffer();
    ...
    path.ReleaseBuffer();
    quand on peut faire


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    CString path= dlg.GetPathName();  // contain the selected filename
    	const char* temp = (LPCTSTR)path;
    voir quand on est super bal�ze

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    CvCapture* cvCreateFileCapture(dlg.GetPathName()); // ou CvCapture* cvCreateFileCapture((LPCTSTR)dlg.GetPathName()); si ca passe pas à la compile
    si le constructeur existe.

  10. #10
    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
    Par d�faut
    oui ,GetBuffer pourra etre utilis� sur les fonctions qui demandent un char * par exemple avec la pr�caution du ReleaseBuffer
    ...

  11. #11
    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
    Citation Envoy� par la drogue c'est mal
    parce que qui dit GetString (je suppose GetBuffer)
    Ben non, GetString() n'est pas GetBuffer()...
    CSimpleStringT::GetString
    GetString() fait la m�me chose que le cast, sans cast.
    Le seul inconv�nient, c'est que �a n�cessite une version de MFC assez r�cente (pas celle livr�e avec Visual 6, en tout cas).
    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.

  12. #12
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par d�faut
    bah il fallait pr�ciser de quelle class on parlait...

  13. #13
    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
    Il n'y a qu'une seule classe de type cha�ne en MFC qui contient GetString():
    CString est CStringT< TCHAR > qui h�rite de CSimpleStringT< TCHAR >.
    L'ancienne version de MFC qui date d'avant CStringT (celle qui avait des CString toutes b�tes) ne poss�de pas de fonction GetString().
    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 String^ en const char*
    Par Sixdeux dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 22/05/2007, 09h58
  2. convertir flotant en "const char*"
    Par chmimi05 dans le forum C++
    R�ponses: 3
    Dernier message: 11/03/2007, 23h13
  3. [MFC] CString vers const char*
    Par Rafoo dans le forum MFC
    R�ponses: 9
    Dernier message: 17/06/2006, 15h43
  4. [MFC - ATL] CString vers const char *
    Par VitamineC dans le forum MFC
    R�ponses: 2
    Dernier message: 12/04/2006, 18h56
  5. Conversion CString en const char*
    Par LRobi dans le forum MFC
    R�ponses: 8
    Dernier message: 19/07/2005, 12h12

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