Oyé à tous
Je dois utiliser une fonction C++ présente dans une DLL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [DllImport("DLLUtil.dll")] public static extern Int32 ReconstructImage(tagReconstructImage Param);
Cette fonction reçoit en paramètre une structure "tagReconstructImage". Cette structure contient elle-même un pointeur sur un tableau (dynamique) contenant d'autres structures ("tagRoi").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 typedef struct { long X; long Y; long Largeur; long Hauteur; }tagRoi; typedef struct { long NbBuffers; tagRoi* pRoi; }tagReconstructImage;
Voici mes déclarations de structure en 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 public const Int32 NBMX_CAMERAS = 5; [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct tagRoi { public Int32 X; public Int32 Y; public Int32 Largeur; public Int32 Hauteur; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct tagReconstructImage { /// <summary>Nombre de buffer</summary> public Int32 NbBuffers; /// <summary>Zone de travail sur les images</summary> public tagRoi[] pRoi; } [DllImport("DLLUtil.dll")] public static extern Int32 ReconstructImage(tagReconstructImage Param);
Je suis pas sûr du tout du : public tagRoi[] pRoi;
pour le faire correspondre à tagRoi* pRoi;
(C'est même là qu'est mon problème !!)
Voici mon code pour appeler la fonction 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 //--- Paramètres de reconstruction tagReconstructImage paramReconstruct = new tagReconstructImage(); paramReconstruct.pRoi = new tagRoi[NBMX_CAMERAS]; paramReconstruct.NbBuffers = NBMX_CAMERAS; //- for (Int32 IdxCamera = 0; IdxCamera < NBMX_CAMERAS; IdxCamera++) { paramReconstruct.pRoi[IdxCamera] = new tagRoi(); paramReconstruct.pRoi[IdxCamera].X = 10 + IdxCamera; paramReconstruct.pRoi[IdxCamera].Y = 20 + IdxCamera; paramReconstruct.pRoi[IdxCamera].Largeur = 30 + IdxCamera; paramReconstruct.pRoi[IdxCamera].Hauteur = 40 + IdxCamera; } //- Reconstruction Image Int32 Retour = ReconstructImage(paramReconstruct);
A l'appel de la fonction, il y a une execption qui est levée :
Paramètre incorrect. (Exception de HRESULT : 0x80070057 (E_INVALIDARG))
Pourtant, coté C#, quand on la visualise avec le débogeur, tout est OK (tout est alloué et affecté). C'est vraiment lors de passage à la fonction C++.
Qqun a t il une idée ?
Partager