Conversion bstr / char* en VB : le retour...

Izhim Ur Baal Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 4 mai 2004 - 29 avril 2004 à 14:42
Izhim Ur Baal Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 4 mai 2004 - 4 mai 2004 à 10:13
Ehhhh oui, le sujet a déjà été abordé mille fois, mais je n'ai pu trouver parmis la masse d'infos des réponses satisfaisante au probléme qui m'habite...
Bon, on oublie les jeux de mots minables, et voici mon probleme.

Je souhaite récupérer dans un module VB les enfos envoyées par des boitiers de votes electroniques. Le probléme est que le langage natif de l'OCX est le C. Toutefois, les developpeurs de l'engin ont prevu le devel sous VB et les chaines passées en parametre des fonctions sont de type BSTR*. Voici le prototype de la fonction qui permet de recuperer les informations saisies sur le boitier:

BOOL HMGetData( short address, BSTR* message);

Les données sont retournées dans la chaine "message"

Pour tester le bazar, j'ai réalisé un petit script, que je vous file ici :

Private Sub Command1_Click()

Dim B As Boolean
Dim TxTMessage As String

vote.SetComPort ("COM4")
' pour lui dire sur quel port se trouve le recepteur
vote.Open
' pour permettre d'ouvrir le canal de com defini au dessus

' ... j'abrege le code...

TxtVote.Text = ""
' j'ai cree un petit formulaire avec un champ texte pour visualiser les données...

B = vote.HMGetData(1, TxTMessage)

et la, c'est le drame... Le contenu de la chaine TxTMessage apres execution de l'instruction est du type "???e", ou "??", enfin certainement pas les information que j'attends (qui devrait etre "A", ou "B"...).

Et le pire, c'est qu'il existe une fonction qui permet d'envoyer des données sur le LCD du boitier, dont voici le prototype:

BOOL HMSetMessage(short address, BSTR message);

et quand dans mon module je teste avec

B = vote.HMSetMessage(1, "test")

le message "test" apparait sur l'ecran du boitier. Ca marche dans un sens, mais pas dans l'autre...

Donc ma question est : comment recuperer les informations dans TxTMessage ? Faut t'il que je fasse une conversion avant l'appel ? apres ? pendant lol ? ou que je laisse tomber le vb pour coder le module en cobol, ou en prolog ? mdr
Non, serieuresement, si quelqu'un me solutionne mon probleme, je lui... enfin voila quoi.

(Si c'est une nana, tant mieux, sinon, ben tant pis pour moi, ca m'apprendra a faire des promesses debiles... :-D )

Merci d'avance.

4 réponses

ultraxa Messages postés 127 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 21 janvier 2007
29 avril 2004 à 18:39
as tu configurer la vitesee, nbrde bit de ton port ?(mscomm.setting), mais c'est vrai que c'est bizarre que t'arrive a envoyer des données , que doit tu recevoir exactement ?

sinon je crois que bstr renvoie en une chaine unicode et non pas ascii va voir ici :
http://www.cppfrance.com/code.aspx?ID=18655
0
ultraxa Messages postés 127 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 21 janvier 2007
29 avril 2004 à 18:47
essaye tt simplement avec ça
texte= strconv(message,vbfromunicode)
0
Izhim Ur Baal Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 4 mai 2004
30 avril 2004 à 10:13
>que doit tu recevoir exactement ?

Quelque chose du genre "1", "2", ou bien "A", "B", selon la configuration Numerique/Caractere et selon sur quelle touche j'appuie.

>sinon je crois que bstr renvoie en une chaine unicode et non >pas ascii va voir ici :

C'est exactement le cas. J'ai deja potassé pas mal de doc la dessus, et effectivement bstr renvoie une chaine unicode. C'est d'ailleurs de la que viens la merde, je pense.

>essaye tt simplement avec ça
>texte= strconv(message,vbfromunicode)

J'ai deja essayé. Marche pas. Le probleme etant que cela effectue une conversion sur une chaine deja bidouillé et formatée par le systeme, et elle ne reconnait pas son propre schema de representation binaire...
De plus, la fonction de recuperation de donnée ne renvoie pas la chaine avec les resultats, mais modifie directement son contenu (mode de passage en OUT), et c'est galère pour travailler dessus...

D'autres idées ?
0
Izhim Ur Baal Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 4 mai 2004
4 mai 2004 à 10:13
suite des evenements : apres test du meme module sous vb.net, ca marche... apparemment, les chaines ne sont pas gérées de la meme maniere...

Le gros probleme c'est qu'il faut imperativement que mon module soit developpé en VB, et ca commence à urger...

Une ame charitable n'aurait'elle pas une idée à proposer ?
0
Rejoignez-nous