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
Partager