none
Ubound en vbNet RRS feed

  • Question

  • Bonjour,

    j'ai une procédure que j'appelle dans l'evenement datareceived d'un port série,et qui utilise dans un select case la fonction Ubound() comme suit:

     Private Sub ReceiveArray1(ByVal inArray As Object)
            On Error Resume Next
           
            Dim bRcv(29) As Byte
            Select Case UBound(inArray)
                Case 0
                    MsgBox("case 0")
                    If inArray(0) = 126 Then
                        SerialPort1.ReceivedBytesThreshold = 29    ' Generates a receive event on 29 character received
                        SerialPort1.ReadBufferSize = 29    ' Read the receive buffer 29 char. at a time
                    End If
                Case 28
                    'MsgBox("case 28")

    mais au moment de l'exécution,en faisant des tests,j'ai remarqué qu'il ne rentre pas dans le select case du tout,du coup je pense qu'il y a un souci avec Ubound,je ne sais pas si je peux la remplacer par autre chose

    Merci d'avance

    • Modifié selly25 lundi 15 avril 2013 12:47
    lundi 15 avril 2013 12:28

Réponses

    • Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:26
    lundi 15 avril 2013 13:37
  • Il est remplis quand vous appellez SerialPort.Read. Cette *fonction* remplit le tableau avec les données reçues et retourne le nombre d'octets lus et vous passiez ce résultat à votre fonction (qui attend en fait un tableau d'octets) d'où erreur.

    Eventuellement utiliser le type byte() plutôt que Object dans votre argument de fonction (j'imagine que vous allez toujours passer un tableau). Cela aurait permis de voir l'incohérence à la compilation.

    Eventuellement éviter de tester des tailles en dur. A ma connaissance l'idée générale est que le port série envoie les données à son rythme et je pense que c'est à votre code de s'adapter. Si vous supposez que vous allez toujours recevoir les données en une fois avec la taille voulue, cela pourrait ne plus marcher selon les circonstances et créez des bugs difficiles à comprendre. Au moins pour le débogage prévoyez éventuellement un cas "else" dans le select case pour que vous puissiez voir une éventuelle situation inattendue...

    De même vous pouvez réutiliser le même tableau (ce qui évitera d'allouer un nouveau tableau à chaque réception).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:25
    lundi 15 avril 2013 14:58
    Modérateur

Toutes les réponses