Dll en C [Résolu]

Signaler
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006
-
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006
-
Salut,


J ai besoin d une petite aide. En csharp, je recupere un tableau de byte declarer ainsi :

byte []saveArray


Ce tableau doit etre passe en parametre a une dll developpe en C qui prend en parametre un char *


Dll en C :

void HelloWorld(char *test)

{

    printf("Text %s\n", test);

}


Program en C#

        [DllImport("myDlltest.dll")]

        public static extern unsafe void HelloWorld (char *test);


        /*[DllImport("CodecDCT.dll", CharSet = CharSet.Auto)]

        public static extern void YUVImage();

        */

        public static byte[] savedArray;


        static void Main(string[] args)

        {

            savedArray = new byte[64000];

            for (int _i = 0; _i < 64000; ++_i)

            {

                savedArray[_i] = Convert.ToByte('1');

            }

            HelloWorld(savedArray);

        }


Bon bien sur ca ne compile pas en c# pusiqu il attend un char *, et vu
que les pointeurs en c# n existe je me retrouve un peu bloquee.


Merci pour vos idees d avance

2 réponses

Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
Salut,
Dans la déclaration de ta méthode externe, il faut indiquer au framework comment il doit passer le paramètre, grâce à un attribut System.Runtime.InteropServices.MarshalAs :
<hr />[DllImport("myDlltest.dll")]
public static extern void HelloWorld(
   [MarshalAs(UnmanagedType.LPArray)] byte[] test);
<hr />
Ici, la valeur LPArray indique que le paramètre test doit être passé comme un pointeur vers le premier élément du tableau, donc sauf erreur, ça devrait correspondre au prototype de ta fonction C ("char *").

Fais-moi savoir si ça ne marche pas.
Messages postés
17
Date d'inscription
samedi 13 septembre 2003
Statut
Membre
Dernière intervention
30 octobre 2006

ca marche exactement comme je le veux

merci