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++/CLI Discussion :

Problem entres System::string et char*


Sujet :

C++/CLI

  1. #1
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Par d�faut Problem entres System::string et char*
    Salut,

    Alors voici mon probl�me j'utilise une OpenFileDialog (Parcourir)pour permette a l'utilisateur de choisir un fichier. Je r�cup�r� le patch du fichier dans:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
                   System::String^ Patch;
     
                    Parcourire->ShowDialog();
    		Patch = Parcourire->FileName; 
    		textBox1->Text =Patch;
    Le chemin complet s�affiche bien dans mon textbox mais pour la suite du programme jais besoin d'utiliser le patch du fichier via un char * seulement impossible de convertir ce System::String en char* et le code suivant ne fonctionne pas car il n'ouvre jamais le bon fichier (jais l�impression que la variable Patchchar contient n�importe quoi.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    //Conversion du System::string en char *  pour le fopen
    		pin_ptr<const wchar_t> wch = PtrToStringChars(Patch);
    		size_t convertedChars = 0;
    		size_t  sizeInBytes = ((Patch->Length + 1) * 2);
    		errno_t err = 0;
    		Patchchar = (char *)malloc(sizeInBytes);
    Merci d'avance

  2. #2
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    il n'y a pas une methode c_str() ? Tu ferais Patch.c_str() ...

  3. #3
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Par d�faut
    �Merci pour la r�ponse mais avec patchchar=Patch.c_str(); j'obtient l'erreure suivante :

    la partie gauche de '.c_str' doit avoir un class/struct/union
    ps: je travaille sur une version expresse 2010 donc pas d'Intellisense

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Citation Envoy� par Farow Voir le message
    Petit coquin, tu ne serais pas en train de nous faire du C++ manag� ? Je ne sais pas comment fonctionne ce type de r�f�rence (d�clar� avec un ^ apr�s le type), donc je ne peux pas t'aider, mais je dirais que tu devrais essayer Patch -> c_str() au lieu de Patch.c_str().

  5. #5
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Par d�faut
    Du C++ manag� ? c'est quoi exactement j'utilise Visual studio et la boite � outils.

    En gros je veut que l'utilisateur choisisse un fichier �quivalent a un fichier texte et mon programme ajoute du texte a l�int�rieure du fichier avec un fopen et un fwrite.

    Seulement le probl�me est que pour r�cup�r� le chemin avec un Openfailedialog jais besoin d'une String^ sinon j'obtient :

    String'*: impossible d'utiliser ce type ici sans '^' de niveau sup�rieur
    Et que fopen/fwrite a besoin du chemin dans un char*. Sinon tu connait une m�thode peut-�tre plus simple pour ouvrir et ins�r� du texte dans un fichier de type txt avec une s�lection via Openfailedialog. ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Citation Envoy� par Farow Voir le message
    Du C++ manag� ? c'est quoi exactement j'utilise Visual studio et la boite � outils.
    Le diable m'emporte si je sais exactement ce que c'est. C'est une sorte d'extension du langage C++ par Microsoft.

    En revanche, ce dont je suis certain, c'est que String^ n'est pas un type C++ mais une r�f�rence en C++ manag�, et �a implique beaucoup de choses que visiblement tu ne ma�trises pas (ni moi non plus d'ailleurs).

    Il faut chercher une mani�re de faire en C++ pur. Regarde cet exemple.

    Edit : le C++ manag�, c'est �a.

  7. #7
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Par d�faut
    Heu je vien de me dire que le probl�me vien peut-�tre du namespace je travaille dans From.h et dans :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
    ..............
    }
    Avec ce code en haut de la page :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    namespace GPs_edit_pos {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    Bref si quelqun a une idee j'avou etre un peut perdue la je suis d�veloppeur PHP/javascript alors le C++ c'est un peut l�inconnue pour moi xD

    Merci

  8. #8
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Par d�faut
    Citation Envoy� par jblecanard Voir le message
    Le diable m'emporte si je sais exactement ce que c'est. C'est une sorte d'extension du langage C++ par Microsoft.

    En revanche, ce dont je suis certain, c'est que String^ n'est pas un type C++ mais une r�f�rence en C++ manag�, et �a implique beaucoup de choses que visiblement tu ne ma�trises pas (ni moi non plus d'ailleurs).

    Il faut chercher une mani�re de faire en C++ pur. Regarde cet exemple.

    Edit : le C++ manag�, c'est �a.
    AAAAAAAAhhhhhhh merci effectivement je suis en C++/CLI je pense que je me suis tromper dans le type de projet au d�but j'ais pris Application Windows form. Je pense que c'est Projet Win32 qu'il faut choisir non?? Cela va r�soudre mon probl�me si je recommence avec le bon type de projet � votre avis ??

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Citation Envoy� par Farow Voir le message
    Je pense que c'est Projet Win32 qu'il faut choisir non?? Cela va r�soudre mon probl�me si je recommence avec le bon type de projet � votre avis ??
    R�soudre ton probl�me, n'exag�rons pas, mais en tout cas, �a va t'aider � repartir sur les bonnes bases oui, �a c'est s�r

    Ca ne r�soudra pas directement l'erreur puisque les handlers (type suivi d'un ^) n'existent pas en C++. Tu peux essayer mon exemple par contre.

  10. #10
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Vous ne connaissez pas le C++/CLI mais vous codez un truc comme :
    pin_ptr<const wchar_t> wch = PtrToStringChars(Patch);
    Vous �tes en train de faire le l'interop�rabilit� entre du code manag� (attention le C++ manag� n'existe plus, c'�tait l'anc�tre du C++/CLI) et du code non manag� ou natif.
    C'est la partie la plus d�licate du C++/CLI.
    C'est comme manipul� de la nitroglyc�rine et sachant vaguement ce qu'est une m�che court pour un b�ton de dynamite : le d�but de grosses d�sillusions.

    Votre t�che est trivial en C++ standard ou en C++/CLI alors ne les m�langer pas.

    Pour la version C++ standard voir le lien du post de jblecanard.
    Pour du C++/CLI, pour lire un fichier texte : http://msdn.microsoft.com/fr-fr/library/bsy4fhsa.aspx

    Mais il existe bien d�autres moyens plus pratiques en C++/CLI en fonction du format du fichier � ouvrir.

    PS:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Patchchar = (char *)malloc(sizeInBytes);
    C'est bien beau d'allouer de la RAM, mais faudrait peut-�tre l'initialiser avec la valeur de la cha�ne, et de pr�f�rence en utilisant des chaines UNICODE et non ASCII car les primitives syst�mes natives n'utilisent que cette version.

Discussions similaires

  1. Conversion System::String ^ en char *
    Par betedesvosges dans le forum C++/CLI
    R�ponses: 2
    Dernier message: 27/05/2015, 17h50
  2. R�ponses: 1
    Dernier message: 16/03/2007, 15h28
  3. convertir un System::String* en char *
    Par poporiding dans le forum C++
    R�ponses: 4
    Dernier message: 26/07/2006, 17h01
  4. R�ponses: 3
    Dernier message: 14/06/2006, 10h06
  5. R�ponses: 12
    Dernier message: 31/01/2006, 21h46

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