Long en long*

Signaler
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
1 février 2006
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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?
A voir également:

6 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
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#
*/
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Statut
Membre
Dernière intervention
1 février 2006

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);
}
}
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
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#
*/
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
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 );
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Oups, désolé pour le texte en GRAS.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
Ah oui exact, je n'avais même pas penser à la suppression du code unsafe

/*
coq
MVP Visual C#
*/