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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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,
Partager