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 ?