Bonjour,
je dois implémenter une dll C++ native depuis un projet C#
Dans ma dll, j'ai cette structure :et cette méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct MaStruct {<div style="margin-left:40px">unsigned int param1; unsigned int param2; float param3; unsigned int param4; unsigned int param5; unsigned int param6; double param7;</div>}MA_STRUCT;Donc, c'est cette méthode que je voudrais implémenter dans mon projet C#.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 extern "C" __declspec(dllexport) void MaMethode(MA_STRUCT stTab[]) {<div style="margin-left:40px">// remplissage du tableau...</div>}
J'ai créé une structure équivalente :J'ai importé la méthode de la dll :
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 [StructLayout(LayoutKind.Explicit)] public struct MaStruct {<div style="margin-left:40px">[FieldOffset(0)] public unit param1; [FieldOffset(4)] public unit param2; [FieldOffset(8)] public float param3; [FieldOffset(12)] public unit param4; [FieldOffset(16)] public unit param5; [FieldOffset(20)] public unit param6; [FieldOffset(24)] public double param7;</div>}Je crois savoir qu'il faille que je mette 'à plat' ma structure sous forme de tableau d'octets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [DllImport("maDll.dll")] unsafe protected static extern void MaMethode(byte[] tabStruct);
mais je ne sais pas trop comment m'y prendre...
J'ai essayé de faire ça :mais ça ne marche pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 unsafe {<div style="margin-left:40px">byte[] tabOctets = new byte[struct.Length*32]; // où 'struct' est un tableau de MaStruct // et 32 car ma structure prend 32 octets... for(int i=0; i<struct.Length; i++) {<div style="margin-left:40px">tabOctets[i*4] = &struct[i].param1; tabOctets[(i+1)*4] = &struct[i].param2; tabOctets[(i+2)*4] = &struct[i].param3; tabOctets[(i+3)*4] = &struct[i].param4; tabOctets[(i+4)*4] = &struct[i].param5; tabOctets[(i+5)*4] = &struct[i].param6; tabOctets[(i+6)*4] = &struct[i].param7;</div>}</div>}
donc comment faire?
est-ce bien la bonne méthode??
merci de m'apporter votre aide
Partager