[Gambas-user] gb3: writing variables to a string using a memory stream and pointer

Benoît Minisini gambas at ...1...
Tue Sep 13 03:19:48 CEST 2011


> > On Sun, Sep 11, 2011 at 07:40, Kevin Fishburne<
> > 
> > kevinfishburne at ...1887...>  wrote:
> >> My code looks like this:
> >> 
> >> ' For writing outgoing UDP data to memory.
> >> Public data As String
> >> Public mem As Stream
> >> 
> >> ' Create data string for outgoing transaction queue.
> >> data = Space(8)
> >> mem = Memory VarPtr(data) For Write
> >> mem.Begin
> >> 
> >>    Write #mem, (Server.DateCurrent + Server.DateUTC) As Float
> >> 
> >> mem.Send
> >> Print data
> >> 
> >> It throws signal 11 on the Print statement.
> >> 
> >> I have two questions. First is this the correct way to write one or more
> >> variables to a string in memory, and second what's up with the signal
> >> 11? I'm using revision 4094 and will update to the newest revision in a
> >> moment.
> 
> On 09/11/2011 08:13 AM, Jussi Lahtinen wrote:
> > Not sure what happen there, but try this:
> > 
> > Public pData As Pointer
> > Public mem As Stream
> > 
> > pData = Alloc(SizeOf(gb.Float))
> > mem = Memory pData For Write
> > mem.Begin
> > 
> >    Write #mem, (Server.DateCurrent + Server.DateUTC) As Float
> > 
> > mem.Send
> > 
> > Print Float@(pData)
> 
> Thanks everyone for your replies. I'm now using this code ('Data' is a
> string):
> 
> ' Create data string.
> DataPointer = Alloc(8)
> Mem = Memory DataPointer For Read Write
> Mem.Begin
>    Write #Mem, (Server.DateCurrent + Server.DateUTC) As Float
> Mem.Send
> 'Data = Read #Mem As Float
> Data = Read #Mem, 8
> 
> ' Send transaction.
> udp.Begin
>    Write #udp, id As Byte
>    Write #udp, 56 As Byte
>    'Write #udp, (Server.DateCurrent + Server.DateUTC) As Float
>    Write #udp, Data, Len(Data)
> udp.Send
> 
> The recipient gets the wrong value for 'Data' when it is converted back
> from a string to a float. It gets the correct value if I use the
> commented "Write #udp, (Server.DateCurrent + Server.DateUTC) As Float".
> Any ideas why I can't write the data stored at DataPointer to the string
> Data?
> 
> In case anyone forgot, I need the data to be saved as a string so it can
> be stored in an outgoing network transaction queue, which is an array of
> transaction structures. The Data property of the structure stores
> arbitrary groups of variables so grouping them as a string is the most
> convenient method since there will be up to 255 different transaction
> types.

1) Using Begin/Send is useless if you have only one WRITE instruction.

2) Every stream has a byte order. Did you check that the byte order of your 
memory stream is the same as the byte order of your Udp socket stream?

-- 
Benoît Minisini




More information about the User mailing list