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 :

Interop C++ CLR / C# : Probl�me String en char*


Sujet :

C++/CLI

  1. #1
    Membre confirm� Avatar de Vonziz
    Inscrit en
    D�cembre 2006
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 215
    Par d�faut Interop C++ CLR / C# : Probl�me String en char*
    Bonjour,

    Je vous pr�sente mon probl�me : J'ai cr�� une application console C# afin de communiquer avec une DLL en Visual C++ mode CLR.

    Mon probl�me est le suivant : j'ai une m�thode avec la signature suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int EX_Export_File(char *argv);
    Cette m�thode est dans la DLL Visual C++.

    Lorsque j'inclus la DLL dans mon projet C#, je peux faire appel � cette m�thode mais curieusement, il me demande en entr�e un sbyte* argv. Je n'arrive pas � trouver de solution pour passer uniquement un String...

    Comment se fait-il que la signature de la m�thode a chang�? Comment puis-je faire pour passer un String en C# en char* en Visual C++?

    Ce probl�me se pose dans la mise en place d'un wrapper C++/CLI entre une DLL Win32 C++ et un programme C#.

    Merci d'avance pour vos r�ponses.

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    88
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 88
    Par d�faut
    Bonjour

    Comme tu l'as dit, il te faut d'abord �crire un wrapper en C++/CLI avant de pouvoir appeler cette dll depuis du C#.

    Ensuite, dans ce wrapper, tu devras transformer des String en char*. Il faut utiliser les m�thodes statiques de la classe Marshal (System::InteropServices::Marshal il me semble). Je crois que la m�thode s'appelle Marshal::StringToHGlobalAuto(elle prend un string, et te donne un char*).

    A la fin de ta m�thode, pense � lib�rer la m�moire occup�e par ton char*. Par contre, n'utilise surtout pas le delete classique du C++, il faut utiliser le delete de Marshal::FreeHGlobal.

    Voila

    Tu peux te r�f�rer aux tutos de nico-pyright sur ce site, qui sont tr�s bien faits.

    Bonne journ�e

  3. #3
    Membre confirm� Avatar de Vonziz
    Inscrit en
    D�cembre 2006
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 215
    Par d�faut
    La r�ponse est exactement ce que je recherchais.

    J'ai r�solu le probl�me en passant par un String du C# au C++/CLI puis j'ai convertit dans le C++/CLI le String^ en char * via le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    IntPtr tmp = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(maChaineAConvertir);
    char* nomConvert=(char *)tmp.ToPointer();
    Merci pour l'aide.

  4. #4
    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

  5. #5
    Membre confirm� Avatar de Vonziz
    Inscrit en
    D�cembre 2006
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 215
    Par d�faut
    Merci au grand gourou du natif / manag�... lol Tes tutoriels m'ont beaucoup servi pour m'en sortir!

    J'aurais juste une suggestion � faire : Faire figurer un tableau clair de type natif avec le code n�cessaire � sa conversion en manag�. Et faire de m�me en manag� => natif (faire comme le lien que tu m'as donn� mais avec d'autres sujets que le String).

  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
    Pourquoi pas, que proposes-tu comme type � traiter ?

  7. #7
    Membre confirm� Avatar de Vonziz
    Inscrit en
    D�cembre 2006
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 215
    Par d�faut
    En fait, durant mon travail sur l'interop�rabilit�, tes toturiels m'ont �t� tr�s utiles pour comprendre le le principe g�n�rale mais ce qui m'a manqu�, c'est d'avoir un tableau simple qui r�sume toutes les conversions avec :

    Natif => Manag� :
    char * => String
    int * => Array<int>

    Manag� => Natif :
    String => char *
    Array<int> => int *

    etc... (pour tous les types paraissant utiles d'�tre abord�s)

  8. #8
    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
    Ok, je vais voir ce que je peux faire

  9. #9
    Membre confirm� Avatar de Vonziz
    Inscrit en
    D�cembre 2006
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 215
    Par d�faut
    N'y voit surtout pas une critique envers ton travail, qui m'a �norm�ment servi mais c'est juste un compl�ment afin qu'un correspondance soit faite de mani�re claire!

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

Discussions similaires

  1. Probl�me d'affectation Char String
    Par smail21 dans le forum Langage
    R�ponses: 2
    Dernier message: 26/08/2007, 00h00
  2. Probl�me de marshaling char[][] -> System.String
    Par vdew1405 dans le forum C++/CLI
    R�ponses: 2
    Dernier message: 20/08/2007, 10h12
  3. (Probl�me avec...) conversion de std::string en char
    Par crossbowman dans le forum SL & STL
    R�ponses: 7
    Dernier message: 05/03/2006, 19h54
  4. Convertir String en Char: comment?
    Par nmathon dans le forum Langage
    R�ponses: 2
    Dernier message: 22/08/2005, 20h58
  5. [Debutant(e)]limitation du String 65536 char
    Par srane dans le forum API standards et tierces
    R�ponses: 8
    Dernier message: 28/05/2004, 23h42

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