Bonjour,

J'ai un projet C++ (C++ ou C je sais pas) qui a une fonction que j'ai besoin d'appeler depuis mon projet C#. Voilà l'en-tête de la fonction en question :

int LocateDataMatrix(int Width, int Height, unsigned char* SrcBitmap, int MinSize)

Pour le moment j'ai fait un projet "propre" en C++ MFC depuis visual studio (Wrapper) qui fait appel à la fonctions que j'ai besoin. De cette manière j'ai une .DLL (avec le projet de base, j'avais uniquement un .LIB).

J'utilise cette DLL depuis mon projet C# à l'aide de la fonction DLLImport :


[DllImport("DataMatrixWrapper.dll")]
unsafe static extern int w_LocateDataMatrix(int Width, int Height, byte[] SrcBitmap, int MinSize);


Les paramètres sont :

int Width : Largeur de l'image en int

int Height : Hauteur de l'image en int

unsigned char* SrcBitmap : Adresse de pointeur vers un tableau de byte (ce tableau de byte correspond à une image convertie en niveaux de gris puis mise dans un tableau sous forme de bytes)

int MinSize : Taille fixe de 54

Lorsque l'on appelle cette fonction depuis c#, nous avons la valeur 2 qui nous est toujours retournée, elle correspond à un code d'erreur. Comme à ce moment on est entré dans le fonction, le problème ne peut pas se situer dans la communication entre les 2 languages. La fonction C++ marche depuis une autre applic C++, donc la fonction est correcte de toute facon.

Le seul problème possible peut venir du passage de paramètre :
La largeur et la hauteur de l'image ne peuvent être faux. Le seul problème peut venir de SrcBitmap qui veut un unsigned char* en c++. D'après le créateur du projet C++, il faudrait envoyer une adresse mémoire qui pointe sur le tableau de byte de l'image. Et comme il n'y a pas de pointeur en C# c'est la que se situe le problème : Si on a un tableau de byte, comment connaitre son adresse mémoire ?

Merci d'avance pour votre aide