[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