Bonjour,
je viens de récuperer une classe sur le Net en C# que je souhaite convertir en VB.net mais je n'arrive pas à me sortir d'une erreur
l'erreur est la suivante
'Friend Event OnException(id As Integer, function As Byte, exception As Byte)' est un événement. Il ne peut donc pas être appelé directement. Utilisez une instruction 'RaiseEvent' pour déclencher un événement.
et le code converti est le suivant
(la ou cela bloque c'est en gras)
Private Class ListenClass
' --------------------------------------------------------------------
Friend Delegate Sub ResponseData(ByVal id As Integer, ByVal [function] As Byte, ByVal data As Byte())
Friend Event OnResponseData As ResponseData
Friend Delegate Sub ExceptionData(ByVal id As Integer, ByVal [function] As Byte, ByVal exception As Byte)
Friend Event OnException As ExceptionData
Private tcpClient As TcpClient
Private sync As Boolean = False
Private req_id As Integer = 0
Public resp_data As Byte() = {}
' --------------------------------------------------------------------
Public Function WriteData(ByVal _tcpClient As TcpClient, ByVal write_data As Byte(), ByVal _req_id As Integer, ByVal _sync As Boolean) As Boolean
tcpClient = _tcpClient
req_id = _req_id
sync = _sync
' ----------------------------------------------------------------
' Send request to slave
Try
If _connected Then
tcpClient.GetStream().Write(write_data, 0, write_data.Length)
Dim thrListen As New Thread(New ThreadStart(AddressOf ListenThread))
thrListen.Start()
If sync = True Then
thrListen.Join()
End If
Return True
ElseIf OnException IsNot Nothing Then
RaiseEvent OnException(req_id, 0, excExceptionNotConnected)
End If
Catch [error] As Exception
' ----------------------------------------------------------------
' Trap connection lost exception
If [error].InnerException.[GetType]() = GetType(System.Net.Sockets.SocketException) Then
RaiseEvent OnException(req_id, 0, excExceptionConnectionLost)
Else
Throw ([error])
End If
End Try
Return False
End Function
' --------------------------------------------------------------------
' Wait for slave response
Public Sub ListenThread()
Dim time As Integer = 0
Dim buffer As Byte() = New Byte(255) {}
Dim id As Integer = 0
Dim data As Byte()
Dim [function] As Byte
While time < _timeout
' ----------------------------------------------------------------
' Wait for new data
If (tcpClient.GetStream().CanRead) AndAlso (tcpClient.GetStream().DataAvailable) Then
tcpClient.GetStream().Read(buffer, 0, buffer.GetUpperBound(0))
id = BitConverter.ToInt16(buffer, 0)
[function] = buffer(7)
' ------------------------------------------------------------
' Write response data
If [function] >= fctWriteSingleCoil Then
data = New Byte(1) {}
Array.Copy(buffer, 10, data, 0, 2)
Else
' ------------------------------------------------------------
' Read response data
data = New Byte(buffer(8) - 1) {}
Array.Copy(buffer, 9, data, 0, buffer(8))
End If
' ------------------------------------------------------------
' Response data is slave exception
If [function] > fctExceptionOffset Then
[function] -= fctExceptionOffset
RaiseEvent OnException(id, [function], buffer(8))
ElseIf OnResponseData IsNot Nothing AndAlso (sync = False) Then
RaiseEvent OnResponseData(id, [function], data)
Else
resp_data = data
' ------------------------------------------------------------
' Response data is regular data
End If
Exit While
End If
' ----------------------------------------------------------------
' Retry reading every 10ms until timeout
time += 10
Thread.Sleep(10)
End While
If (time >= _timeout) AndAlso (OnException IsNot Nothing) Then
RaiseEvent OnException(req_id, 0, excExceptionTimeout)
End If
End Sub
End Class
je sais ce n'est pas tres digeste, mais bon que faire ? je suis trop novice pour m'en sortir tout seul
Merci pour votre aide
@+ Viejo
Partager