Convertir un string en varchar* [Résolu]

Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
- - Dernière réponse : Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 14 nov. 2005 à 14:03
Bonjour,
je débute en C# et je dois créer une application CS utilisant une dll écrite en c.
J'arrive à appeler toutes les fonctions de la dll sauf celle prenant en argument un varchar* . Comment faire pour convertir les string en varchar* afin de pouvoir appeler la fonction?
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
3
Merci
lol... j'ai trouvé...

donc :


unsafe {

fixed(
char* scChaineTraite = sChaineTraite) {
Wrap.ComTGCEcrire(sChaineTraite.Length, scChaineTraite);
}
}

ca devrait fonctionner.

Sébastien FERRAND
[MVP C#]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
tu pourrais donner le prototype de ta fonction C ?
et aussi, le DllImport que tu utilises ?

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
C'est une dll "technique" fournie par siemens. Voici le prototype de la fonction

[DllImport("C:\\siemens\\Srv_tgc\\inttgc_dll.dll", CharSet=CharSet.Ansi)]
public unsafe static extern int ComTGCEcrire(long taillemessage, char* message);
Commenter la réponse de ybuchheit
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
à la place de char* as-tu essayé "ref string" ?

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
çà ne marche pas non plus avec "ref string"
Commenter la réponse de ybuchheit
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
essayons...

[DllImport("C:\\siemens\\Srv_tgc\\inttgc_dll.dll", CharSet=CharSet.Ansi)]
public unsafe static extern int ComTGCEcrire(long taillemessage, char* message);

private void blabla(string text) {

// on transforme le string en char[]
char[] bla = text.ToCharArray();
unsafe {
ComTGCEcrire( bla.Length, *bla );
}
}

ne pas oublier d'activer le code unsafe dans les options de compilation du projet.

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
merci pour ton aide, malheureusement çà ne marche toujours pas :'-(
Commenter la réponse de ybuchheit
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
tu as une erreur d'exécution ? de compilation ?

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
Erreur de compilation "L'opérateur * ou -> doit être appliqué à un pointeur"

Voici l'appel de la fonction:
int iRetour;
char[] scChaineTraite = sChaineTraite.ToCharArray();
unsafe
{
iRetour= Wrap.ComTGCEcrire(sChaineTraite.Length, *scChaineTraite);
}

et la déclaration de la fonction:
public unsafe static extern int ComTGCEcrire(long taillemessage, char* message);
[DllImport("C:\\siemens\\Srv_tgc\\inttgc_dll.dll", CharSet=CharSet.Ansi)]
Commenter la réponse de ybuchheit
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
le dllimport est situé avant la déclaration...
Commenter la réponse de ybuchheit
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
0
Merci
Pour un argument de type char* on peut utiliser le type string sauf que si la fonction modifie la chaine il faut passer un StringBuilder sinon la version de Seb avec le buffer fixé marche aussi.
Commenter la réponse de Lutinore
Messages postés
13
Date d'inscription
lundi 31 octobre 2005
Dernière intervention
1 février 2006
0
Merci
CA MARCHE!!
Merci énormément, car j'ai vraiment eu du mal à trouver quelque chose qui marche sur internet pour convertir le string en varchar*. Mille fois merci !!
Commenter la réponse de ybuchheit
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
0
Merci
Fallait chercher LPSTR.
Commenter la réponse de Lutinore
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
54
0
Merci
ouaip... LPSTR c'est le mieux... quand c'est toi qui développe la dll... dans son cas, il faut faire avec ce qu'on lui donne.

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
36
0
Merci
Ce que je veux dire c'est que LPSTR c'est un char*, c'est pour ça que je lui propose le StringBuilder. Mais moi aussi je préfère ecrire mes prototypes avec des pointeurs.
Commenter la réponse de Lutinore

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.