Dll en C

Résolu
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006 - 12 juin 2006 à 12:45
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006 - 12 juin 2006 à 13:56
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

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
12 juin 2006 à 13:07
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.
3
ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006
12 juin 2006 à 13:56
ca marche exactement comme je le veux

merci
0
Rejoignez-nous