Retour d une DLL

ZaRMaS Messages postés 17 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 30 octobre 2006 - 14 juin 2006 à 14:36
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 15 juin 2006 à 00:51
Salut a tous,


J ai un petit probleme avec ma dll code en C. Elle retourne un char *
et je cherche a recuperer en csharp le retour de cette fonction. Voici
ma declaration


      [DllImport("myDll.dll")]

        public static extern unsafe
string myFunction([MarshalAs(UnmanagedType.LPArray)] byte[] myData, int
width, int height);

Donc elle prend en parametre un tableau de byte et cela ne pose aucun probleme;


Voici la fonction code en C :


 char        *myFunction(char *myData, int Arg_width, int Arg_height)

{

    char *myNewData  =malloc(strlen(myData) * sizeof (char));


    //La fonction remplie myNewData;


    return (myNewData)

}


Ce qui me parait etrange et qui explique pk je psote du code en C c est
que ca marche des fois et d autre "non" comme si j avais rate un
malloc. APres avoir bien verifie je trouve rien de suspect et donc jeme
suis dit que cela pouvait venir du cast entre le string et le char *.
Si quelqu un a quelques idees pour m expliquer ce qui pourrait ne pas
aller je suis preneur


Merci par avance

1 réponse

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
15 juin 2006 à 00:51
Salut, j'avais remarqué ça l'autre fois ici :

http://www.csharpfr.com/infomsg_DLL_757801.aspx

tu passes un tableau et tu le reçois en tant que pointeur char* dans ton code C. Mais la question que je me pose, il est ou le caractère null '\0' dans ta chaine myData !?

En ce qui concerne le retour de chaine par pointeur char* j'ai vu que Microsoft utilisait CoTaskMemAlloc :

// CPP


DLLIMPORT char* ReturnString()
{
 char* s = (char*)CoTaskMemAlloc( 16 );
 strcpy( s, "Hello World" );
 return s;
}


// C#


[ DllImport( ".." ) ]
private static extern string ReturnString();
0
Rejoignez-nous