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 : 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
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,