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

Windows Forms Discussion :

[C#] Conversion d'un byte[] en byte *


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 7
    Par défaut [C#] Conversion d'un byte[] en byte *
    Bonjour,

    J'utilise une dll managé dans mon projet C# mais j'ai un petit soucis pour l'utilisation d'une fonction.

    La fonction que j'utilise dans la dll managé contient un argument de type byte*, quand j'appelle cette fonction en c# je met un byte [] ("comme il n'y a pas pas de pointeur"), mais le compilateur me sort une erreur cannot convert byte[] to byte*

    Quelqu'un aurait une idée ?

    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Par défaut
    je crois que c'est byte tout court qui s'en raproche le plus
    à tester...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 4
    Par défaut
    alors deja tu dois utiliser ton code dans des blocs unsafe
    si tu importe la fonction dll, tu declare l'argument en ref byte, et tu passe l'argument en fonction(ref byte[0])
    sinon, tu fait fixed(byte* ptr = &byte[0]) { fonction(ptr); } pour pas que le garbage collector nettoie byte[] pendant que tu utilise le pointeur.

  4. #4
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 7
    Par défaut
    Ca ne passe pas avec unsafe et les ref, par contre j'utilise les __pin *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned char buffer __gc[]; //pour le managé
    Byte __pin* p = &buffer[0]; // grace a cette conversion le byte[] devient byte *

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 4
    Par défaut
    cad sa marche pas avec unsafe et ref !?

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1
    Par défaut
    Salut !

    J'ai le même problème avec une DLL dont toutes les fonctions n'admettent en paramettre qu'un pointeur de char.

    J'ai essayé les 2 solution proposées, aucune ne fontionne.
    En ce qui concerne la méthode avec unsafe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string BaseString = "ALIAS=.....EUR\r";
    			char Point = BaseString[0];
    				fixed (char* P = &BaseString[0])
    Message erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Impossible de prendre l'adresse de l'expression donnée : char* P = &BaseString[0]
    Pour ce qui est du ref, il doit être spécifié dans la fonction à l'intérieur de la DLL.

    Si quelqu'un a une solution. Merci

    POZx

  7. #7
    Membre éclairé
    Profil pro
    Chef de projet en SSII
    Inscrit en
    Juillet 2002
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juillet 2002
    Messages : 88
    Par défaut
    C'est normal que cela ne fonctionne pas : L'objet string n'est pas qu'un tableau de char. Il faut que tu tu transformes ta string en char[] puis que tu fasses le fixed. Esseye cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string toto = "ma chaine";
    char [] charArray = toto.ToCharArray();
    fixed(char* pCharArray = &charArray[0])
    {
    //traitement
    }
    Par contre si tu passes directement ton objet string, cela ne fonctionne pas? Des fois il y a des trucs étonnant avec le Marshalling.

    Sinon petite précision : __pin et fixed ont exactement la même fonction : ils empechent le GC de déplacer le tableau pendant le traitement. La différence se situe dans le scope: __pin fixe te talbeau pour toute la fonction tandis que fixed le fix à l'intérieur des {}.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion InputStream en tableau de bytes
    Par jujur dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 17/05/2009, 21h46
  2. Conversion String en tableau de Byte
    Par riete dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/09/2007, 09h27
  3. conversion d'un tableau de bytes en string
    Par prady92 dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/03/2007, 13h47
  4. Conversion d'un entier en byte
    Par noutnout53 dans le forum Java ME
    Réponses: 5
    Dernier message: 12/05/2006, 12h49
  5. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10

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