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#] Passage de tableau de string avec transcodage


Sujet :

C++/CLI

  1. #1
    Membre averti Avatar de maitredede
    Homme Profil pro
    Pisseur de code
    Inscrit en
    Mai 2006
    Messages
    60
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Cal�donie

    Informations professionnelles :
    Activit� : Pisseur de code

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par d�faut [C/C#] Passage de tableau de string avec transcodage
    Bonjour,

    J'ai une fonction C d�finie comme suit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    libvlc_instance_t * libvlc_new( int argc, const char *const *argv, libvlc_exception_t *p_e )
    Je souhaite l'appeler en C#. J'ai donc d�clar� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
            [DllImport("libvlc", EntryPoint = "libvlc_new")]
            public static extern IntPtr InstanceNew(int argc, string[] argv, NativeExceptionStruct ex);
    Seulement, la fonction native me jette : elle n'arrive pas � lire le tableau.

    Apr�s lecture de la doc de la fonction et un peu de google, il semblerai que je me trouve dans un probl�me �pineux. Les encodages des chaines viennent me pourrir la vie : la fonction native veut de l'UTF-8.

    Au final, je dois convertir du string[] vers du const char*const* en transcodant le string vers de l'UTF-8 avec un caract�re null terminal.

    Est-ce que quelqu'un peut m'aiguiller sur une piste svp ?

  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,

    Je ne suis pas sur que tu puisses proc�der comme cela.

    Normalement pour utiliser du code natif (c, c++ etc), tu dois passer par un wrapper C++/CLI.
    C'est la dedans que tu convertiras tes strings en char* etc

    Il y a un super tuto la dessus fait par nico-pyright sur ce site.

    Bonne journ�e

  3. #3
    Membre averti Avatar de maitredede
    Homme Profil pro
    Pisseur de code
    Inscrit en
    Mai 2006
    Messages
    60
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Cal�donie

    Informations professionnelles :
    Activit� : Pisseur de code

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par d�faut
    Bonjour,

    Je ne vois pas � quel tuto tu te r�f�re (d�fois, je suis un cerveau lent).

    Si c'est possible, j'aimerai �viter au maximum de faire du code "natif", parce que je vise la portabilit� et que Mono ne supporte pas (ou pas bien) les assembly en code mixte (C++/CLI avec du C++ natif).

    Donc si tu as une id�e... Voir m�me cr�er un Marshaler pour ce type sp�cifique de donn�es...

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    F�vrier 2004
    Messages
    19 875
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur .NET
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 19 875
    Par d�faut
    Tu peux peut-�tre convertir tes chaines en UTF-8 avant l'appel � la fonction, via Encoding.UTF8. Dans ce cas il faudra modifier la signature de la fonction pour passer des tableaux de byte et non des string

    Citation Envoy� par ArianeV Voir le message
    Normalement pour utiliser du code natif (c, c++ etc), tu dois passer par un wrapper C++/CLI.
    Ce n'est pas du tout une obligation, on peut souvent s'en sortir avec des P/Invoke comme l'a fait maitredede (du moins pour du code C, pour du C++ avec des classes c'est une autre histoire...)

    Citation Envoy� par maitredede Voir le message
    Bonjour,
    Je ne vois pas � quel tuto tu te r�f�re (d�fois, je suis un cerveau lent).
    il y en a 2 en fait:
    http://nico-pyright.developpez.com/t...c2005/interop/
    http://nico-pyright.developpez.com/t...2005/interop2/

  5. #5
    Membre averti Avatar de maitredede
    Homme Profil pro
    Pisseur de code
    Inscrit en
    Mai 2006
    Messages
    60
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Cal�donie

    Informations professionnelles :
    Activit� : Pisseur de code

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par d�faut
    Bonjour tomlev,

    J'ai d�j� essay� de passer des tableaux de bytes... Ce qui m'am�ne au fait que pour passer des tableaux de string, je dois passer un tableau de tableau de byte (soit un byte[][]).
    L�, c'est la couche interop qui m'insulte parce qu'elle n'a pas de Marshaler pour ce type...

    Dans les deux tutos (bien faits) de Nico, il n'y a aucune piste pour mon probl�me (� moins que le manque de vacances ne se fasse sentir...)

    Je vais tenter de bricoler un ou deux trucs, mais je pense que je vais en chier si je veux ne pas rajouter une couche native perso...

    Merci pour ton aide

  6. #6
    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
    J'ai le m�me probl�me. Je ne trouve pas de moyen de convertir les String C# en sbytes*.

    Quelqu'un pourrait-il nous aider sur ce sujet svp?

  7. #7
    R�dacteur/Mod�rateur


    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    F�vrier 2004
    Messages
    19 875
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur .NET
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 19 875

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

Discussions similaires

  1. Comparaison Tableau de String avec un string
    Par halloumiali dans le forum Collection et Stream
    R�ponses: 3
    Dernier message: 19/03/2012, 14h21
  2. Tableau de String avec Hibernate ?
    Par H3bus dans le forum Hibernate
    R�ponses: 1
    Dernier message: 07/03/2012, 00h04
  3. VBA / C++ - Passage de tableau de strings
    Par paparasta dans le forum C++
    R�ponses: 1
    Dernier message: 26/11/2010, 15h26
  4. retourner tableau de string avec web service SOAP
    Par xx_FiFty_xx dans le forum XML/XSL et SOAP
    R�ponses: 2
    Dernier message: 23/06/2008, 10h13
  5. Parcourir un tableau de String avec logic:iterate
    Par casawi dans le forum Struts 1
    R�ponses: 7
    Dernier message: 07/02/2008, 14h40

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