Pb pour Importer une dll ecrite en C dans un prog C#

Résolu
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013 - 2 mars 2010 à 16:24
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013 - 3 mars 2010 à 16:58
Bonjour,
j'ai utilisé avec succes une dll ecrit en c dans un prog en delphi.
Aujourd'hui j'essay la meme operation (meme dll) mais dans un prog en C# (je debute dans ce language).

Le code .h de la dll donne ceci (2 fonctions)
COPIDLL_DECL int Initialize();
COPIDLL_DECL int Getvalue(const char* objName, double* Value);

Je declare ma dll en C# de la facon suivante:
[DllImport("c:\\madll.dll", CharSet = CharSet.Auto)]
public static extern int Initialize();
=> cette fonction est OK

Mais, j'ai des problemes pour la deuxieme fonction avec les pointeurs... J'ai essayé plusieurs methodes sans succés.
Comment declarer ces pointeurs ?
Quelqu'un aurait-il une idée ?

6 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 mars 2010 à 11:24
Salut, plusieurs définitions sont possibles, la plus évidente dans ton cas est celle-ci :

[ DllImport( "..", CharSet = CharSet.Ansi ) ]
private static extern int Getvalue( string objName, ref double Value );
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 mars 2010 à 16:31
Faut voir comment est allouée et détruite la chaine coté C, ça peut être un IntPtr ou un StringBuilder, base toi sur ces exemples :

http://msdn.microsoft.com/en-us/library/x3txb6xc.aspx
3
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
2 mars 2010 à 16:46
Hello,
Voici un échange sur le même sujet


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013
2 mars 2010 à 20:00
Merci pour le lien.
ca m'a eclairé sur le principe.
Par contre je n'ai toujours pas d'idée claire sur la declaration est l'utilisation des pointeurs de cette fonction (tirée du .h) :

MesureDLL_DECL int Getvalue(const char* objName, double* Value);

Si quelqu'un a un eemple ou des liens, je suis preneur...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013
3 mars 2010 à 14:23
Grand Merci lutinor !
cela fontionne parfaitement.

Comment ferais-tu pour celle-ci:

Mesuredll_DECL int MesureGetS(const char* objName, char* sValue);

La declaration suivante ?
[ DllImport( "..", CharSet = CharSet.Ansi ) ]
private static extern int MesureGetS( string objName, ref char[] SValue );

et dans ce cas comment gerer l'appel pur recuperer ma valeur Svalue?
0
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013
3 mars 2010 à 16:58
Merci a vous.
En fait j'ai fait un melange avec ref et string builder...

ce qui donne:
[DllImport("c:\\madll.dll", CharSet = CharSet.Ansi,CallingConvention = CallingConvention.Cdecl)]
public static extern int GetStr(String objname, StringBuilder Svalue);

pour l'une et pour l'autre fonction:
[DllImport("c:\\madll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetFloat(String objname, ref double Fvalue);

je sais pas si c'est trés "correcte" mais cela fonctionne. Merci a vous deux pour vos conseils
0
Rejoignez-nous