Pb pour Importer une dll ecrite en C dans un prog C# [Résolu]

Signaler
Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013
-
Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013
-
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

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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 );
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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
Messages postés
14841
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
15 octobre 2020
92
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...
Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013

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...
Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013

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?
Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013

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