Long en long*

ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006 - 1 févr. 2006 à 10:38
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 févr. 2006 à 11:51
Bonjour,
Je dois appeler une fonction écrite en C et provenant d'une dll. Cette fonction prend comme argument un long*.
Ma fonction est bien déclarée comme suit:
[DllImport("C:\\madll.dll", CharSet=CharSet.Unicode)]
public unsafe static extern int mafonction( long* taillemessage, char* message );
Mais comment faire en cs pour déclarer un long* et le passer en paramètre de ma fonction?

6 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 10:47
Salut,

Attention, le "long" C est 32 bits, le "long" .Net est 64bits, donc je dirais plutôt int* taillemessage.

Pour le passage de paramètre : &mavaleur ?

/*
coq
MVP Visual C#
*/
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
1 févr. 2006 à 11:18
Merci beaucoup!! J'arrive enfin à appeler la fonction!!
Par contre, il me reste juste un point: le char* de mon fonction. Je passe une string "toto" en paramètre, mais visiblement, il ne prend que la première lettre de la chaîne. Y aurait-il une explication logique? ( Je débute en C, donc désolé si mes questions peuvent paraître bête)
Voici, le code:

string sChaineTraite="toto";
int iRetour;
unsafe
{
fixed(char* scChaineTraite = sChaineTraite)
{
iRetour=Wrap.mafonction( &iLongueurChaine, scChaineTraite);
}
}
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 11:25
Dans le prototype : char* message => string message (ou StringBuilder message si il s'agit d'un parametre Out ou In/Out)

/*
coq
MVP Visual C#
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 11:45
Salut, tu dois pouvoir éviter le code unsafe avec ce prototype :

( Et comme l'a dit Coq tu peux utiliser le type String si le paramètre est en entré seulement. )

[ DllImport( "C:\\MyLib.dll", CharSet = CharSet.Unicode ) ]
public static extern int MyFunction( ref int size, StringBuilder message );
0

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

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 févr. 2006 à 11:46
Oups, désolé pour le texte en GRAS.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 11:51
Ah oui exact, je n'avais même pas penser à la suppression du code unsafe

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous