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

cs_didiou Messages postés 1 Date d'inscription jeudi 27 novembre 2003 Statut Membre Dernière intervention 27 novembre 2003 - 27 nov. 2003 à 15:42
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009 - 7 avril 2009 à 19:59
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2003 à 16:14
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...
0
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
6 avril 2009 à 22:23
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 avril 2009 à 08:49
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++
0
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 14:31
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???
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 avril 2009 à 14:44
J'ai déjà tout expliqué ici:
http://www.cppfrance.com/code.aspx?ID=30115

ciao...
BruNews, MVP VC++
0
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 15:51
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
0
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 19:59
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
0
Rejoignez-nous