Conversion d'un String en VB.net en Char* en C++.net

Signaler
Messages postés
1
Date d'inscription
jeudi 27 novembre 2003
Statut
Membre
Dernière intervention
27 novembre 2003
-
Messages postés
7
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
8 avril 2009
-
salut tout le monde!
J'ai un petit probleme sur lequel je galere depuis 2 jours:
J'ai developpé une dll en C++.net qui comporte une fonction ayant pour argument un char*.
Cette dll est appelée par un programme VB.net qui doit donc passer en argument de la fonction un Char*. Or vu que le type char* n'existe pas en VB.net je lui passe une String. Le probleme est qu'au moment de passer la String en parametre, la dll ne recoit que le premier caractere de la String.

exemple:
Prenons le cas d'une fonction a laquelle on passe un nom et il retourne l'inverse:

prototype de la foction de la dll C++:

char* __stdcall ReverseName(char *name);

programme appelant en VB

Private Sub Button1_Click() Handles Button1.Click

Dim nom As String = Space(10)

nom = TextBox1.Text 'ligne1
Label1.Text = ReverseName(nom) 'ligne2

End Sub

Si j'ecrit "salut" le programme est sensé me retourner "tulas"
et au lieu de ca:
-dans la ligne 1 de l'exemple:
nom = "salut "
-mais au moment du passage de parametre en ligne 2
nom= "s"

Donc je pense qu'il doit exister une fonction de conversion afin que la String soit stockable dans un char*.

Voila, je compte sur vous car je dois faire ca rapidement.

Merci!!

DIDIOU

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Je ne connais pas vb.net mais pour vb simple on ne retourne jamais de pointeur car il ne connait pas. On modifie les octets du buffer passe en param a la dll et au mieux on retourne un code d'erreur.
Ne serait-ce pas idem pour vb.net ?
BruNews, ciao...
Messages postés
7
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
8 avril 2009

J'ai pratiquement le même problème et je ne comprend pas ta réponse BruNews. Je suis encore un apprenti en prog alors, pourrais-tu me détailler un peu plus ton affirmation!

Merci.
Pascal
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Prenons le code au dessus:
Label1.Text = ReverseName(nom)


NON, la DLL ne retourne rien d'exploitable pour VB.
On aura par contre:
ReverseName(nom)
Label1.Text = nom
La DLL aura modifié les octets dans le buffer nom (la String).

ciao...
BruNews, MVP VC++
Messages postés
7
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
8 avril 2009

Ok je vois!

Et pour passer le chemin d'un fichier texte, on utilise une string mais, ça existe pas en C. Que me sugères-tu???
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
J'ai déjà tout expliqué ici:
http://www.cppfrance.com/code.aspx?ID=30115

ciao...
BruNews, MVP VC++
Messages postés
7
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
8 avril 2009

Ok! merci!

Je vais voir à ce projet probablement cet apres-midi (au Québec). Alors, si ça fonctionne, je te le ferait savoir!

Soit dit en passant! Merci pour ton coup de main!!!

Pascal
Messages postés
7
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
8 avril 2009

J'ai essayer cette méthode ainsi que quelques autre et j'obtient toujours le même message d'erreur. Je sais pas si ça te dit quelque chose.

???Restriction PInvoke : impossible de retourner des variants.???

Merci, Pascal