Straker Active Member Licensed User Longtime User Nov 23, 2014 #1 Hi everybody, ho someone can help me... I'm writing a program witjh some data exchange between the device and the PC through a socket and AsyncStream. Everything is fine if I maintain the exchanged data very simple. But when I try to use some custom Type, just to make the code more readable, I've got always the same Null Pointer Exception error... The code is as follows: Code: Type HeaderType(Stx1 As Byte, Stx2 As Byte, Orig As Byte, Dest As Byte, cmd As Byte, length As Byte, Addr As Long, chkSum As Byte,) Type RxBuffType(Header as HeaderType, Dati(127) As Byte, chkDati As Byte) Dim RxBuff As RxBuffType Through AsyncStream the program receives a Buffer of bytes. Bytes from 0 to 10 are the header, from the 11th byte are the real Data. Is not a problem of the index. I made some test checking the Buffer.length and always starting from index=0 QUESTION 1: there is a way to map the first 11 bytes from Buffer and 'map' them on the header. I know B4a doesn't support pointers, but there is a workaround just like in Visual basic (memcpy + VarPtr)? QUESTION 2: How can I copy bytes from Buffer() to RxBuff.Dati() ? For copying bytes, I tried the following codes, bu without effort: Code: dim b as byte rxBuff.Stx1=Buffer(0) ' WORKS! ok, of course b=Buffer(0) rxBuff.Stx1=b 'WORKS! of course... rxBuff.Dati(0) =Buffer(0) 'CRASH! why? b=Buffer(0) rxBuff.Dati(0)=b 'CRASH! dim bc as ByteConverter bc.ArrayCopy(Buffer, 0, RxBuff.Dati, 1) 'CRASH rxBuff.Dati -> null pointer
Hi everybody, ho someone can help me... I'm writing a program witjh some data exchange between the device and the PC through a socket and AsyncStream. Everything is fine if I maintain the exchanged data very simple. But when I try to use some custom Type, just to make the code more readable, I've got always the same Null Pointer Exception error... The code is as follows: Code: Type HeaderType(Stx1 As Byte, Stx2 As Byte, Orig As Byte, Dest As Byte, cmd As Byte, length As Byte, Addr As Long, chkSum As Byte,) Type RxBuffType(Header as HeaderType, Dati(127) As Byte, chkDati As Byte) Dim RxBuff As RxBuffType Through AsyncStream the program receives a Buffer of bytes. Bytes from 0 to 10 are the header, from the 11th byte are the real Data. Is not a problem of the index. I made some test checking the Buffer.length and always starting from index=0 QUESTION 1: there is a way to map the first 11 bytes from Buffer and 'map' them on the header. I know B4a doesn't support pointers, but there is a workaround just like in Visual basic (memcpy + VarPtr)? QUESTION 2: How can I copy bytes from Buffer() to RxBuff.Dati() ? For copying bytes, I tried the following codes, bu without effort: Code: dim b as byte rxBuff.Stx1=Buffer(0) ' WORKS! ok, of course b=Buffer(0) rxBuff.Stx1=b 'WORKS! of course... rxBuff.Dati(0) =Buffer(0) 'CRASH! why? b=Buffer(0) rxBuff.Dati(0)=b 'CRASH! dim bc as ByteConverter bc.ArrayCopy(Buffer, 0, RxBuff.Dati, 1) 'CRASH rxBuff.Dati -> null pointer
derez Expert Licensed User Longtime User Nov 23, 2014 #2 Two points: 1. It should be RxBuff.Header.Stx1 because stx1 belongs to the header. 2. initialize the type variable before working with it: RxBuff.Initialize Then try again the ArrayCopy Upvote 0
Two points: 1. It should be RxBuff.Header.Stx1 because stx1 belongs to the header. 2. initialize the type variable before working with it: RxBuff.Initialize Then try again the ArrayCopy
Straker Active Member Licensed User Longtime User Nov 23, 2014 #3 derez said: Two points: 1. It should be RxBuff.Header.Stx1 because stx1 belongs to the header. Click to expand... Yes, it was just a copy'n'paste error (from one try to another) derez said: 2. initialize the type variable before working with it: RxBuff.Initialize Then try again the ArrayCopy Click to expand... THANK YOU, i simply missed that I should initialize the custom types (why? who cares, it works!) Upvote 0
derez said: Two points: 1. It should be RxBuff.Header.Stx1 because stx1 belongs to the header. Click to expand... Yes, it was just a copy'n'paste error (from one try to another) derez said: 2. initialize the type variable before working with it: RxBuff.Initialize Then try again the ArrayCopy Click to expand... THANK YOU, i simply missed that I should initialize the custom types (why? who cares, it works!)