gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 mai 2011
-
12 janv. 2007 à 17:44
gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 mai 2011
-
16 janv. 2007 à 10:02
Bonjour,
J'ai fait l'acquisition d'un système de vote (un récepteur Radio Frequency ainsi que plusieurs télécommandes) connecté en USB (COM 4 émulé).
Le vendeur propose un SDK, un fichier dll pour décoder le paquets qui arrivent par ce port. Et donne quelques faibles indications pour créer un programme en vb6 :
(http://www.h-itt.com/h-itt_manual_10.html)
Private Declare Function hitt_inspect Lib "H-ITTSDK.dll" (ByRef Bytes As Byte, id As Long, key_code As Long) As Long
' ....
Dim bytTest() As Byte
Dim lngId As Long
Dim lngKeyCode As Long
Dim lngReturn As Long
'....
' read from COM port into bytTest
' consult VB documentation for reading from COM port
lngReturn = hitt_inspect(bytTest(0), lngId, lngKeyCode)
'inspect lngReturn for success or failure
_____________________________________________________
J'ai réalisé mon propre petit programme, mais j'ai du mal à faire passer les infos qui arrivent dans la fonction, comme ils le préconisent (erreur d'execustion 13 , type incompatible)
Private Declare Function hitt_inspect Lib "H-ITTSDK.dll" (ByRef Bytes As Byte, id As Long, key_code As Long) As Long
Dim tampon$
Private Sub Form_Load()
With MSComm1
.CommPort = 4
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "115200,n,8,1"
.SThreshold = 1
.InputMode = 1
.PortOpen = True
End With
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
tampon$ = tampon$ & MSComm1.Input
End Select
End Sub
Private Sub Command1_Click
Dim bytTest() As Byte
Dim lngId As Long
Dim lngKeyCode As Long
Dim lngReturn As Long
Debug.Print tampon$ ' je récupère une chaîne de caractères qui, selon la touche appuyée, ressemble à ceci : ?à? àà??à???àà
lngReturn = hitt_inspect(bytTest(tampon$), lngId, lngKeyCode) ' l'erreur arrive ici
Debug.Print lngId ' je devrais pouvoir récupérer l'ID de la télécommande
Debug.Print lngKeyCode ' je devrais pouvoir récupérer la touche appuyée
tampon$ = ""
End Sub
Est-ce qu'à première vue je vais quelque chose qu'il ne faut pas ??? merci pour toute aide.
PS : j'ai demandé de l'assistance au vendeur du produit, mais elle n'arrive pas vite.....
Gribouillex
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 janv. 2007 à 18:05
oui, en fait c'est un tableau de byte que tu doit passer à ta fonction.
En fait il ne faut pas que tu lise une chaine de caractère sur le port COM, mais que tu remplisse ton tableau bytTest avec ces caractères.
Ensuite tu dois passer l'adresse de ton tableau à ta dll. L'adresse d'un tableau en VB se passe en passant le tout premier élément (bytTest(0)) du tableau par référence (byRef).
Alors soit tu modifie le code de lecture du port com pour remplir le tableau. Soit tu rajoute une boucle pour remplir le tableau à partir de ta variable tampon$.
Dans tous les cas, ton appel de la fonction doit etre ainsi :
lngReturn = hitt_inspect(bytTest( 0 ), lngId, lngKeyCode)
---- Sevyc64 (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 janv. 2007 à 18:13
Salut
Bah oui, type incompatible :
lngReturn = hitt_inspect(bytTest(tampon$), lngId, lngKeyCode)
bytTest(tampon$) --> L'index d'un tableau doit être un numérique, pas une chaine
En fait, ce qu'il te faut, c'est transformer ta chaine tampon$ en un tableau de 10 Bytes (d'après la doc)
ReDim bytTest(9) ' Les index commencent à 0
For r = 0 To (Len(tampon$) - 1)
bytTest(r) = Asc(Mid$(tampon$, r + 1, 1))
Next r
et fournir à la fonction l'info sous la forme indiquée dans la doc :
lngReturn = hitt_inspect(bytTest(0), lngId, lngKeyCode)
Donc, si tampon$ contient plus de 10 caractères, il faudra que tu refasses appel à la DLL pour les 10 caractères suivants jusqu'à épuisement --> mettre en pratique les fonctions de découpage/recherche sur chaine : Len, Left, Mid, Right, Instr ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 mai 2011 16 janv. 2007 à 10:02
Merci pour toutes ces réponses. J'ai appris beaucoup..
D'un autre côté, le developpeur de l'outil m'a donné quelques indications qui viennent corroborer vos remarques, si bien que maintenant, j'arrive à utiliser le matériel impeccablement.