Passage d'une adresse en c# vers une fonction C++
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
Courage, contournons l'obstacle !
Merci pour cette réponse rapide.
Je viens de jeter un coup d'oeil sur le lien : je ne vois traités que des tableaux à une dimension.
Je vais donc botter en touche, et passer ma matrice (A,B) par un tableau à une dimension (A*B) et la reconstituer dans la dll en C++ natif.
Pour le fun, si tu vois une autre solution... Sinon, je considère cette question comme résolue (du moins je l'espère).