Lecture données envoyées par un service sur un named pipe
Bonjour à tous,
J'essaye depuis plusieurs jours de mettre en place une communication entre un programme vb6 et un service via les named pipe.
Le service est une interface entre le programme vb6 et un appareil de mesure, qui permet de récupérer les mesures vers le programme.
Ainsi, le programme se comporte comme client pour initialiser l'appareil et lui demander de lancer les mesures, mais devient serveur lorsque l'appareil renvoi les mesures à travers le named pipe, du moins c'est ce que j'ai compris.
J'utilise l'excellent contrôle utilisateur trouvé sur le net http://www.vbforums.com/showthread.p...er-Named-Pipes ([VB6] PipeRPC - RPC Over Named Pipes) qui fonctionne très bien lorsque je suis dans la configuration de départ (à l'initialisation et lancement des mesures).
Par contre, dès que je souhaite lire les mesures que le service envoi, je fais un ReadFile qui ne trouve rien sur le pipe.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| Public Function ReadBytesFromFile() As String
Dim lSuccess As Long
Dim lBytesRead As Long
Dim bytArr() As Byte
Dim Temp As String
Dim i As Integer
On Error GoTo ErrorHandler
ReDim bytArr(6)
'read file contents into a bytearray and convert to string
lSuccess = ReadFile(StrPtr("\\" & mServer & "\pipe\" & mPipeName), VarPtr(bytArr(0)), mMaxRequest, lBytesRead, NULL_VALUE)
If lSuccess = 0 Then
Temp = Format(bytArr(0), "000")
For i = 1 To UBound(bytArr)
Temp = Temp & " " & Format(bytArr(i), "000")
Next i
Else
MsgBox "Error number " & CStr(lSuccess) & " making the PipeCall:"
End If
ReadBytesFromFile = Temp
ErrorHandler:
End Function |
J'ai trouvé des exemples de codes en vb.net et C# qui eux utilisent la fonction NamedPipeClientStream qui permet de lire justement ce qu'envoi le service, mais cette fonction n'existe pas sous VB6 et j'avoue ne pas comprendre comment pouvoir mettre en place ce principe avec VB6, n'ayant surement pas tout compris sur les named pipe.
Pourquoi ne puis je pas lire directement sur le pipe serveur et intercepter ce qu'il envoi avec ma fonction ci-dessus?
Sinon, comment faut il aller lire sur le pipe les données envoyées par le service?
En vous remerciant par avance du temps que vous voudrez bien consacrer à mes interrogations, à bientôt,