Convertir un string en varchar*

Résolu
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006 - 14 nov. 2005 à 10:04
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre 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?
A voir également:

15 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 12:14
lol... j'ai trouvé...

donc :


unsafe {

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

ca devrait fonctionner.

Sébastien FERRAND
[MVP C#]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 10:16
tu pourrais donner le prototype de ta fonction C ?
et aussi, le DllImport que tu utilises ?

Sébastien FERRAND
[MVP C#]
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 10:31
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);
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 10:42
à la place de char* as-tu essayé "ref string" ?

Sébastien FERRAND
[MVP C#]
0

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

Posez votre question
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 11:00
çà ne marche pas non plus avec "ref string"
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 11:04
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#]
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 11:23
merci pour ton aide, malheureusement çà ne marche toujours pas :'-(
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 11:49
tu as une erreur d'exécution ? de compilation ?

Sébastien FERRAND
[MVP C#]
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 12:01
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)]
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 12:02
le dllimport est situé avant la déclaration...
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 nov. 2005 à 12:59
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.
0
ybuchheit Messages postés 13 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 1 février 2006
14 nov. 2005 à 13:20
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 !!
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 nov. 2005 à 13:27
Fallait chercher LPSTR.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 nov. 2005 à 13:50
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#]
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 nov. 2005 à 14:03
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.
0
Rejoignez-nous