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 :

[C# > C++] Comment convertir un sting^ vers un char* ?


Sujet :

C++/CLI

  1. #1
    Membre tr�s actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2002
    Messages
    165
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 165
    Par d�faut [C# > C++] Comment convertir un sting^ vers un char* ?
    Bonjour,

    je n'arrive pas � convertir un string^ vers une valeur de type char* :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    String^ sPage = gcnew String("bonjour");
    IntPtr p=System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(sPage);
    char *chaineChar = reinterpret_cast<char*>(static_cast<void *>(p));
    System::Runtime::InteropServices::Marshal::FreeHGlobal(p);
    le prob dans ce code source c'est que chaineChar ne contient pas "bonjour" mais "true" quand je l'affiche ??

    pourtant j'ai suivi la FAQ C++/CLI qui donne la m�thode pour convertir un string^ vers du char*, o� est l'erreur dans mon code source ?

    http://dotnet.developpez.com/faq/cpp...n#stringtochar

    d�sol� je d�bute aussi dans l'univers du C++/CLI

    merci par avance

  2. #2
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    Citation Envoy� par Elbarto
    ...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    String^ sPage = gcnew String("bonjour");
    IntPtr p = System::Runtime::InteropServices::Marshal::
    StringToHGlobalAnsi(sPage);
    char *chaineChar = reinterpret_cast<char*>(static_cast<void *>(p));
    System::Runtime::InteropServices::Marshal::FreeHGlobal(p);
    ...
    Citation Envoy� par nico-pyright(c)
    ...
    LPCSTR chaineChar = reinterpret_cast<LPCSTR>(static_cast<void *>(p));
    ...

  3. #3
    Membre tr�s actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2002
    Messages
    165
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 165
    Par d�faut
    Je viens de corriger mais �a ne change rien, chaineChar contient toujours "true"

    je pr�cise que j'utilise Visual C++ 2005 express

  4. #4
    Expert confirm�
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    D�tails du profil
    Informations personnelles :
    �ge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par d�faut
    oui et ceci aussi est � changer c'est vrai
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    String^ sPage = "bonjour";

  5. #5
    Membre tr�s actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2002
    Messages
    165
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 165
    Par d�faut
    �a ne fonctionne toujours pas, je n'arrive pas � retrouver la chaine "bonjour" m�me en faisant le remplacement par :

    String^ sPage = "bonjour";

    par contre en utilisant la classe cr�e par cet auteur l� �a fonctionne:

    http://www.voidnish.com/articles/Sho...tringConvertor

    peut-�tre que l'exemple de la FAQ C++/CLI contient une erreur ?

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    salut, la r�ponse est simple, il faut utiliser la chaine avant sa lib�ration (lib�ration qui est faite avec FreeHGlobal)
    donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String ^chaineManagee = "Chaine Managée";
    IntPtr p=System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi
    (chaineManagee);
    LPCSTR chaineChar = reinterpret_cast<LPCSTR>(static_cast<void *>(p));
     
    printf("%s", chaineChar); // utilisation de la chaine 
    // libération à la fin (comme le delete du c++)
    System::Runtime::InteropServices::Marshal::FreeHGlobal(p);
    je me rends compte que ce n'est pas clair dans la faq c++/cli, cela sera int�gr� dans la prochaine version

    Pour me faire pardonner, tu auras le droit en avant premi�re � une deuxi�me m�thode de conversion, qui parraitra aussi dans la prochaine version de la faq

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <vcclr.h>
     
    String ^chaineManagee = gcnew String("une chaine Managée");
    char * chaineChar;
    pin_ptr<const wchar_t> wch = PtrToStringChars(chaineManagee);
    int taille = (chaineManagee->Length+1) * 2;
    chaineChar = new char[taille];
    int t = WideCharToMultiByte(CP_ACP, 0, wch, taille, NULL, 0, NULL, NULL); 
    WideCharToMultiByte(CP_ACP, 0, wch, taille, chaineChar, t, NULL, NULL);
    (inconv�nient : utilisation de WideCharToMultiByte , mais ici, la lib�ration est classique en c++)

  7. #7
    Membre tr�s actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2002
    Messages
    165
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 165
    Par d�faut
    Un grand merci Nico-pyright

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Comment convertir de la base 16 vers la base 10 ?
    Par beegees dans le forum Assembleur
    R�ponses: 10
    Dernier message: 25/12/2008, 11h01
  2. comment je peux convertir un InputStream vers un fichier
    Par nina08 dans le forum Entr�e/Sortie
    R�ponses: 2
    Dernier message: 18/11/2008, 14h17
  3. PHP vers ASP svp, comment convertir en asp ?
    Par delavega dans le forum Langage
    R�ponses: 2
    Dernier message: 16/05/2007, 18h14
  4. R�ponses: 2
    Dernier message: 15/09/2006, 16h06
  5. Comment convertir de l'h�xad�cimal vers du bcd ?
    Par chourmo dans le forum Langage
    R�ponses: 1
    Dernier message: 23/06/2005, 20h31

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