Gå til innhold

Anbefalte innlegg

Heisann!

 

Da fungerer mitt program som dere har hjelpt meg med i mine siste poster her.

 

MEN

 

av og til en skjelden gang så stopper programmet (har ingen feil-handtering, hvordan kan jeg "catche" denne feilen og håndtere dette uten at programmet kræsjer?) med feilen "overflow" i min variabel.

 

Dim Data as Integer 'Integer = 2 bytes data, right?

Dim LByte as Byte 'Byte = 1 byte data, right?

Dim HByte as Byte

 

'blablabla

MSComm1.InputLen = 1 'kall på MSComm1.Input returnerer 1 Byte right?

'blablabla

HByte = MSComm1.Input

'blabla

LByte = MSComm1.Input

Data = (HByte * 256) + LByte

 

Hvordan i huleste kan jeg da få en overflow i variabelen Data? "I verste fall" så er HByte = 255 og LByte = 255 --> 255 * 256 + 255 = 65535 og 2 ^16 = 65536 (Men her er "0" også med, så 65535 decimalt er jo faktisk 1111 1111 1111 1111bin)

 

What?

 

Jaja, det hender "en sjelden gang", men jeg må ha ett program med "oppetid" på ca. 6 timer, og jeg vil helst ikke att programmet crasher under den tiden.. Så, feil-handtering? Forslag til literatur? Søkeord?

 

Takk

Lenke til kommentar
Videoannonse
Annonse

En Integer i VB er ikke begrenset med 65536, men ligger innunder -32768 og 32768. Vb lagrer nemlig verdiens negative eller positive posisjon i en ektra bit, slik at signerte variabler vil alltid maksimalt kunne romme halvparten av det en usignert variabel har evne til. Men totalt sett er naturligvis kapasiteten identisk.

 

Når det gjelder løsningen på problemet, kan jeg ikke si annet enn at det sannsynligvis er nødvendig å benytte en annen variabeltype. Du kan f.eks sette inn en Long istedenfor Integer, og da få en kapasitet på hele 2 147 483 647.

 

Det er også mulig å implimere feilhåndtering i VB, slik at kjørende programmer utenfor IDE-en kan fortelle brukeren mer spesifikt om hva problemet består av. Dette kan oppnås ved følgende kode:

 

On Error GoTo ErrorCatch

' Her kommer din kode

' Genererer en feil for å vise hva som skjer når den inntreffer
Debug.Print 1 / 0

Exit Sub ' Endre dette til henholdsvis Function eller Property hvis koden er i en sådan.
ErrorCatch:

MsgBox "Feil nr. " & Err & " oppstod. Beskrivelse: " & Chr(34) & Error & Chr(34), vbCritical, "Feil"

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...