VB/VB.Net L'opération arithmétique a provoqué un dépassement de ca...

A

Anonymous

Invité
#1
Bonjour, J'ai encore un problème :

J'ai fais mes class tout bien :p Je debug :)

Code:
parsing() serialize -> L'opération arithmétique a provoqué un dépassement de capacité.
Et là :'(

J'ai vu dans le post de la MAJ que tifoux a dit que ça venait de serialize dans Le IdMsg

Code:
Public Function serialize(ByVal param1 As DofusWriter)
        Dim _loc_2 As UInteger = 0
        _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 0, Me.autoconnect)
        _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 1, Me.useCertificate)
        _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 2, Me.useLoginToken)

        param1.WriteByte(_loc_2)

        Me.version.serialize(param1)

        param1.WriteUTF(Me.lang)
        param1.WriteUTF(Me.login)

        param1.WriteShort(credentials.Count)

        Dim _loc_3 As UInteger = 0

        While _loc_3 < Me.credentials.Count
            param1.WriteByte(Me.credentials(_loc_3))
            _loc_3 = _loc_3 + 1
        End While

        param1.WriteShort(Me.serverId)

        Return Me
    End Function
J'ai vérifier plusieurs fois, je vois pas d'où ça peut venir. Merci d'avance
 
A

Anonymous

Invité
#2
Re: L'opération arithmétique a provoqué un dépassement de ca

Il faut nous dire à quelle moment le dépassement de capacité ce fait, à quelle ligne.

Pour cela, tu débug ta fonction desserialize en mettant un point d’arrêt au début puis tu avance pas à pas (F7) jusqu’à rencontrer l'erreur.

Puis tu nous en informe ;)
 
A

Anonymous

Invité
#3
Re: L'opération arithmétique a provoqué un dépassement de ca

Merci,
Code:
param1.WriteByte(_loc_2)
Ça commence ici. :/
 
A

Anonymous

Invité
#4
Re: L'opération arithmétique a provoqué un dépassement de ca

Je viens de percuter que ma class de cryptage n'est pas du tout à jour --" Vous pensez que ça peut venir de là ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
Re: L'opération arithmétique a provoqué un dépassement de ca

Salut , alors maintenant on a besoin de la fonction BooleanByteWrapper.setFlag (a moins qu'elle vienne de quelquechose que l'on connait deja) et _loc_2 ne devrait pas etre un uinteger mais un byte je suppose :
Dim _loc_2 As UInteger = 0
param1.WriteByte(_loc_2)
 
A

Anonymous

Invité
#6
Re: L'opération arithmétique a provoqué un dépassement de ca

J'ai la fonction et ça ne change rien de le passer en Byte :( Même si je commente toute cette partie là ya quand même exception.
Code:
  'Dim _loc_2 As Byte = 0
        '_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 0, Me.autoconnect)
        '_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 1, Me.useCertificate)
        '_loc_2 = BooleanByteWrapper.setFlag(_loc_2, 2, Me.useLoginToken)

        'param1.WriteByte(_loc_2)
De plus la fonction prend du Uint
 
A

Anonymous

Invité
#7
Re: L'opération arithmétique a provoqué un dépassement de ca

Quel est la valeur de ton _loc_2 avant l'envoi ?
 
A

Anonymous

Invité
#8
Re: L'opération arithmétique a provoqué un dépassement de ca

Cad avant l'envoi ? Il n'arrive pas à envoyer à cause de l'xption du coup :/
 
A

Anonymous

Invité
#9
Re: L'opération arithmétique a provoqué un dépassement de ca

Ton param1 est initialiser avec une array de longueur 0?

C'est pas possible comme erreur avec l'écriture de seulement 1 byte sinon..
 
A

Anonymous

Invité
#10
Re: L'opération arithmétique a provoqué un dépassement de ca

Un array de longueur 0 ? :shock:
Je l'init. avec ça :

Code:
Public Function pack()
        Dim _loc_2 As New DofusWriter
        Me.serialize(_loc_2)
        DofusWriter.Send(protocolId)
        Return Me
    End Function
 
A

Anonymous

Invité
#11
Re: L'opération arithmétique a provoqué un dépassement de ca

gaetan13 a dit:
Cad avant l'envoi ? Il n'arrive pas à envoyer à cause de l'xption du coup :/
On met un point d’arrêt sur : param1.WriteByte(_loc_2)

Puis on regarde la valeur de _loc_2, soit en ajoutant un espion soit en passant le curseur dessus
 
A

Anonymous

Invité
#12
Re: L'opération arithmétique a provoqué un dépassement de ca

Euh je crois que j'ai mal lue.. c'est quoi le type de l'exeption? (je ne les connais pas très bien en fran^cais).
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#13
Re: L'opération arithmétique a provoqué un dépassement de ca

mikedotnet a dit:
Euh je crois que j'ai mal lue.. c'est quoi le type de l'exeption? (je ne les connais pas très bien en fran^cais).
C'est un Overflow !

Pour ton problème, il y a sûrement une erreur dans tn BooleanByteWrapper.
Théoriquement, il doit tenir dans un octet (0 à 255) ! L'excpetion nous indique que _loc_2 n'entre pas dans cettr tranche et ne peut donc pas être écrit dans le flux de sortie, gênant me diras-tu !
 
A

Anonymous

Invité
#14
Re: L'opération arithmétique a provoqué un dépassement de ca

Avec Dim _loc_2 as byte il me semble que ca n'arriverait pas sur cette ligne non?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#15
Re: L'opération arithmétique a provoqué un dépassement de ca

C'est vrai, mais si tu regardes de plus près, _loc_2 est un entier signé, donc on peut supposer qu'il est supérieur à 255 !
 
A

Anonymous

Invité
#16
Re: L'opération arithmétique a provoqué un dépassement de ca

La valeur est 3251.
Merci mais comment ça se fait que quand je les commente et que ça arrive à version ça met l'ex quand même ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#18
Re: L'opération arithmétique a provoqué un dépassement de ca

Le principe est toujours le même.
On peut donc supposer que tes variables sont trop "grosses" pour les fonctions qui les écrivent dans le flux.
Vérifie une à une les variables et leur valeur selon l'écriture dans le flux ! (par exemple _loc_2 est un entier signé qui doit être écrit dans un octet, sa valeur doit être comprise entre Byte.Min et Byte.Max)
 
A

Anonymous

Invité
#19
Re: L'opération arithmétique a provoqué un dépassement de ca

Logiquement si ya un problème dans _loc_2 ça vient de BooleanByteWrapper.
Je pense que ma fonction est correcte, non ? le bitwise | donne OR en vb.net d’après mdsn.

|= bitwise OR assignment
Code:
 Shared Function setFlag(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As Boolean)

        Select Case param2

            Case 0

                If (param3) Then
                    param1 = param1 Or 1
                Else

                    param1 = param1 & (255 - 1)
                End If

            Case 1

                If (param3) Then

                    param1 = param1 Or 2
                Else
                    param1 = param1 & 255 - 2
                End If

            Case 2

                If (param3) Then

                    param1 = param1 Or 4

                Else
                    param1 = param1 & 255 - 4
                End If

            Case 3

                If (param3) Then
                    param1 = param1 Or 8
                Else
                    param1 = param1 & 255 - 8
                End If

            Case 4

                If (param3) Then
                    param1 = param1 Or 16
                Else
                    param1 = param1 & 255 - 16
                End If

            Case 5

                If (param3) Then
                    param1 = param1 Or 32
                Else
                    param1 = param1 & 255 - 32
                End If

            Case 6

                If (param3) Then
                    param1 = param1 Or 64
                Else
                    param1 = param1 & 255 - 64
                End If
            Case 7

                If (param3) Then

                    param1 = param1 Or 128
                Else
                    param1 = param1 & 255 - 128
                End If

            Case Else

                Throw New Exception("Bytebox overflow.")
        End Select

        Return param1
    End Function
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#20
Re: L'opération arithmétique a provoqué un dépassement de ca

Remplace (dans la déclaration de la fonction setFlag) le type de param1 par Byte.
Ainsi, tu sauras quand est-ce que ça bug (si ça bug)

Ensuite, tu devras regarder et vérifier ton code selon le deuxième paramètre du dernier appel de la fonction (pour mieux le cibler) !
 
Haut Bas