Passage de Paramètres avec DLL C++
Oyé à tous
Je dois utiliser une fonction C++ présente dans une DLL.
Code:
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:
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:
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:
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 ?