hdr
Messages postés3Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention14 mars 2008
-
13 mars 2008 à 18:16
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
14 mars 2008 à 23:38
Salut à tous,
Je souhaiterai utiliser une fonction dans une DLL dont le prototype est :
public virtual int GetImageRawData(ref int pBuf, int bufLen);
Le premier paramètre est un buffer de type byte[] destiné à contenir les triplets RVB d'une image.
Mais je ne sais pas comment transformer mon tableau
byte[] Data = new byte[640 * 480 * 3]
en
ref int pBuf
hdr
Messages postés3Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention14 mars 2008 14 mars 2008 à 12:12
Merci pour la réponse.
Je l'avais vue dans cet autre topicet j'ai essayé de transformer IntPtr en Intmais la fonction ne rempli pas mon buffer !!!
Une idée ?
Merci
hdr
Messages postés3Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention14 mars 2008 14 mars 2008 à 17:15
Après pas mal de tentatives infructueuses, j'ai compris certaines choses.
Voilà le code (très simple) :
byte[] buffer = new byte[640 * 480 * 3];
fixed (byte* ptr = buffer)
{
int ptrDll = (int)ptr;
int res = GetImageRawData(ref ptrDll, buffer.length);
}
En fait la Dll (ActiveX plus exactement) modifie la valeur de la variable ptrDll de type int.
Si par exemple elle vaut 415698 avant l'appel, elle vaut 1569875 après et le programme plante.
Si je force sa valeur à 0 (ptrDll = 0;) elle vaut encore 1569875 après l'appel et le programme plante toujours.
Si je comprends bien, il faudrait que ptrDll pointe sur le premier octet de mon buffer.
Et ça je ne sais pas comment faire.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 14 mars 2008 à 23:38
Par contre ce n'est pas valide de caster un IntPtr en Int32 sur une machine 64 bits, si ton activeX attend seulement un pointeur 32 bits je ne sais pas quel comportement il va avoir.. Mais ton application peut fonctionner en 32 bits si tu la compile avec l'option "-platform:x86" ( voir dans les paramètres de VS ).