Erreur : Null exception

Signaler
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Bonjour,
voila je suis totalement debutant sous vb et je me retrouve face a une erreur que je ne comprend pas:
je fais communiquer un prog VB avec un prog C++ et lors de l'echange de données voila ce qu'il se passe:

Public Sub SrvQueryConf()
      Dim i_zon As Integer
      COM.NB_RTF_ZON = 5
      COM.NB_NOF_ZON = 5
      Try

         Dim recBuffer As Byte()
         Dim i As Integer
         Dim param(0) As Byte    'parameter 0 of Query --> no param to send

         param(0) = 0
         recBuffer = SrvProtectedQryReceive(0, HMI_QUERY_CONF, HMI_ACK_CONF, _
                                            L_TOP.hmiConnection, param, T_WAIT_LARGE)

         'decomposition du buffer de reception
         i = 0
         COM.LGT_BETWEEN_FUR1 = System.BitConverter.ToSingle(recBuffer, i)
         i = i + 4
         COM.LGT_BETWEEN_FUR2 = System.BitConverter.ToSingle(recBuffer, i)
         i = i + 4
         For i_zon = 0 To 6 - 1
            COM.NOF_ZON_LGT(i_zon) = System.BitConverter.ToSingle(recBuffer, i)
            i = i + 4
         Next i_zon

         For i_zon = 0 To 6 - 1
            COM.RTF_ZON_LGT(i_zon) = System.BitConverter.ToSingle(recBuffer, i)
            i = i + 4
         Next i_zon

      Catch
         Throw New Exception("READ DATA ERROR ON SrvQueryConf")
      End Try
   End Sub

pour les deux premieres valeurs echangées il n'y a pas de  soucis mais des que l'on rentre dans les boucles pour remplir les tableaux de  single ben il plante
je ne comprends pas pourquoi?
quelqu'un peut il m'aider a  comprendre?
merci d'avance

 

7 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,
Peut tu nous indiqué les erreurs données?
NOTE: pourquoi For i_zon 0 To 6 - 1 et pas simplement For i_zon 0 To 5

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

c'est peu être un step -1 qu'il a voulu faire ...

MerZi ... Zi ... Zi ... PtitCat  
P.S:DSL pour l'orthographe
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
j'avoue que c'est a l'air bete comme ca le coup de la boucle for mais plus tard ce sera pas du dur et le -1 c un offset car on recupere un truc de 1 a 6 et nous on traite d e 0 a 5... bref

si je retire le try le message est :
Une exception non gérée du type 'System.NullReferenceException' s'est produite dans VB.exe

Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

pourtant ca passe pour les deux premieres data!!!

 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Re,
Quel Type est attendu dans COM.NOF_ZON_LGT() ? c'est bien Single?
Que contient RecBuffer

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
recbuffer est rempli coté C comme ceci pr test:
    ToHmiData.u_msg.Config.Length_between_fur1 = 62;
    ToHmiData.u_msg.Config.Length_between_fur2 = 45;
    for(int i =0; i<MAX_NB_ZON_RTF;i++)
    {
        ToHmiData.u_msg.Config.Rtf_zon_length[i] = 225;
    }
    for(int i =0; i<MAX_NB_ZON_NOF;i++)
    {
        ToHmiData.u_msg.Config.Nof_zon_length[i] = 100;
    }
et ce sont bien des float!
recbuffer contient des octets qui ont l'air de  correspondre car j'ai fait le test en virant mon tableau et en mettant directement une variable single et j'ai bien récupérer 100 et 245 .... sauf que ca m'arrange pas
j'ai besoin de pouvoir utiliser des tableaux

 
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
probleme de declaration ou init ? je sais pas trop ... :(
mais ya bien une solution spartiate:
faire
NOF_ZON_LGT0 = System.BitConverter.ToSingle(recBuffer, i)
            i = i + 4
NOF_ZON_LGT1 = System.BitConverter.ToSingle(recBuffer, i)

            i = i + 4
NOF_ZON_LGT2 = System.BitConverter.ToSingle(recBuffer, i)

            i = i + 4
NOF_ZON_LGT3 = System.BitConverter.ToSingle(recBuffer, i)

            i = i + 4
........

puis faire le passage dans mon tableau
COM.NOF_ZON_LGT(0) = NOF_ZON_LGT0........ franchement c'est pas beau!
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
a priori il faut dimensionner le tableau j'ai fait un truc mais je sais aps si c'est le mieux si quelqu'un a quelque chose de mieux a proposer...
je prends voila ma solution :

 Public lowerBounds_1D As Integer() = {0}
   Public lowerBounds_2D As Integer() = {0, 0}

   Public Sub SrvQueryConf()
      Dim i_zon As Integer
      COM.NB_RTF_ZON = 5
      COM.NB_NOF_ZON = 5
      Try

         Dim L_zone_nof As Integer() = {COM.NB_NOF_ZON}
         Dim recBuffer As Byte()
         Dim i As Integer
         Dim param(0) As Byte    'parameter 0 of Query --> no param to send

         param(0) = 0
         recBuffer = SrvProtectedQryReceive(0, HMI_QUERY_CONF, HMI_ACK_CONF, _
                                            L_TOP.hmiConnection, param, T_WAIT_LARGE)

         s_Conf = New str_conf
         s_Conf.nof_zon_length = Array.CreateInstance(GetType(Single), L_zone_nof, lowerBounds_1D)
         'decomposition du buffer de reception
         i = 0
         COM.LGT_BETWEEN_FUR1 = System.BitConverter.ToSingle(recBuffer, i)
         i = i + 4
         COM.LGT_BETWEEN_FUR2 = System.BitConverter.ToSingle(recBuffer, i)
         i = i + 4

         For i_zon = 0 To 5
            s_Conf.nof_zon_length(i_zon) = System.BitConverter.ToSingle(recBuffer, i)
            'COM.NOF_ZON_LGT(i_zon) = System.BitConverter.ToSingle(recBuffer, i)
            i = i + 4
         Next i_zon

         For i_zon = 0 To 5
            COM.RTF_ZON_LGT(i_zon) = System.BitConverter.ToSingle(recBuffer, i)
            i = i + 4
         Next i_zon

      Catch
         Throw New Exception("READ DATA ERROR ON SrvQueryConf")
      End Try
   End Sub

 Public Structure str_conf
   Public length_between_fur1 As Single
   Public length_between_fur2 As Single
   Public nof_zon_length() As Single
   Public rtf_zon_length() As Single
End Structure