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 :

Passage d'une struct contenant un tableau d'une DLL vers C#


Sujet :

C++/CLI

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 64
    Par défaut Passage d'une struct contenant un tableau d'une DLL vers C#
    Bonjour à tous,
    Je souhaite communiquer avec une dll. Une fonction de cette dll me renvoi une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct DLLStrucure
    {		
        uint8 Valeur1;
        uint16 Valeur2;
        uint32 Valeur3;
        uint64 Valeur4;
        float Valeur5;    
    } DLLStrucure ;
    Dans c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public struct MyStruct
        {
            public byte Valeur1;
            public UInt16 Valeur2;
            public int Valeur3;
            public UInt64 Valeur4;
            public float Valeur5;        
        }
     
    [DllImport("TestSbg.dll")]
            public static extern MyStruct FunctionStruct();
    Cela fonctionne correctement.


    Maintenant j'essaye de passer un tableau par la structure :
    Dans la dll:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct DLLStrucure
    {
     
        uint8 Valeur1[4];
        uint16 Valeur2;
        uint32 Valeur3;
        uint64 Valeur4;
        float Valeur5;    
    } DLLStrucure ;
    Dans mon programme c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public struct MyStruct
    {
        public byte[] Valeur1;
        public UInt16 Valeur2;
        public int Valeur3;
        public UInt64 Valeur4;
        public float Valeur5;
     
        public MyStruct(byte[] valeur1, UInt16 valeur2, int valeur3, UInt64 valeur4, float valeur5)
        {
            this.Valeur1 = valeur1;
            this.Valeur2 = valeur2;
            this.Valeur3 = valeur3;
            this.Valeur4 = valeur4;
            this.Valeur5 = valeur5;
        }
     
        public MyStruct(int taille)
        {
            this.Valeur1 = new byte[taille];
            this.Valeur2 = new UInt16();
            this.Valeur3 = new int();
            this.Valeur4 = new UInt64();
            this.Valeur5 = new float();
        }
    }
    Voici comment je déclare et appel la fonction de la dll:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyStruct TestStruct2 = new MyStruct(4);
    TestStruct2 = FunctionStruct();
    Et la j'ai l'erreur
    La signature du type de cette méthode n'est pas compatible avec PInvoke.
    Quelqu'un aurait une idée d'ou vient le problème?
    D'avance Merci.

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonj,

    Peut être que c'est à cause du passage des types managés vers les types non managés qui peut induire des erreurs ?!!

    Si c'etais le cas, il faut que t'utilise le Marshaling (conversions de données) :

    http://msdn.microsoft.com/fr-fr/libr...68(VS.71).aspx

    UnmanagedType, énumération

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 64
    Par défaut
    Merci beaucoup pour ton aide, je commence à comprendre! mais je peine toujours.
    Donc j'ai modifié ma structure dans mon prog c# mais cela ne fonctionne toujours pas !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public struct MyStruct
        {
            [MarshalAs(UnmanagedType.U1, SizeConst = 4)]
            public byte[] Valeur1;
            public UInt16 Valeur2;
            public int Valeur3;
            public UInt64 Valeur4;
            public float Valeur5;
        }

Discussions similaires

  1. probleme avec une structure contenant un tableau
    Par bringer dans le forum Débuter
    Réponses: 8
    Dernier message: 31/05/2010, 16h18
  2. Impression d'une page contenant un tableau
    Par amydinfo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/09/2009, 06h54
  3. rendre iterable une Classe contenant un tableau 2D
    Par Linschn dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/05/2009, 21h42
  4. Creer une hash contenant un tableau
    Par ultimate_manx dans le forum Langage
    Réponses: 6
    Dernier message: 21/04/2009, 10h57
  5. Réponses: 17
    Dernier message: 02/02/2009, 09h57

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