Convertir un string en varchar* [Résolu]

ybuchheit 13 Messages postés lundi 31 octobre 2005Date d'inscription 1 février 2006 Dernière intervention - 14 nov. 2005 à 10:04 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 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
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 nov. 2005 à 12:14
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#]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 nov. 2005 à 10:16
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
ybuchheit 13 Messages postés lundi 31 octobre 2005Date d'inscription 1 février 2006 Dernière intervention - 14 nov. 2005 à 10:31
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
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 nov. 2005 à 10:42
0
Merci
à la place de char* as-tu essayé "ref string" ?

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
ybuchheit 13 Messages postés lundi 31 octobre 2005Date d'inscription 1 février 2006 Dernière intervention - 14 nov. 2005 à 11:00
0
Merci
çà ne marche pas non plus avec "ref string"
Commenter la réponse de ybuchheit
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 nov. 2005 à 11:04
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
ybuchheit 13 Messages postés lundi 31 octobre 2005Date d'inscription 1 février 2006 Dernière intervention - 14 nov. 2005 à 11:23
0
Merci
merci pour ton aide, malheureusement çà ne marche toujours pas :'-(
Commenter la réponse de ybuchheit
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 nov. 2005 à 11:49
0
Merci
tu as une erreur d'exécution ? de compilation ?

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