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.