tendría que usar la instrucción "Memory" y "Read"
Los recursos de "
Memory Stream" permiten escribir y leer en areas de memoria apuntadas por variables de tipo "Puntero", en manera parecida a uno
stream o
file.
En partiicular nosotros podemos decir que este recurso sirve "más" para
escribir dentro un area apuntada por un Puntero, porqué para leer (y SOLO para LEER) se puedon "tambien" utilizar las funciones especiales (
ad hoc) de Gambas: Byte@( ), Short@(), Int@(), et cetera.
MEMORANDUM:
[1] los recursos de "Memory Stream" se puedon utilizar para "
ESCRIBIR" y para "
LEER" en areas de memoria reservadas y apuntadas por un Puntero;
[2] las funciones especiales: Byte@( ), Short@(), Int@(), et cetera, se utilizan
solo para "
LEER" en areas de memoria reservadas y apuntadas por un Puntero.
[3] si usamos "
Memory Stream" tenemos que leer y escribir de la variable de tipo
Stream.
[4] si usamos las especificas funciones de
gambas, tenemos que leer de la variable de tipo
Puntero.
Vamos a hacer un ejemplo, donde antes escribimos datos en el area de memoria reservada y apuntada por un Puntero, y luego vamos a leer los datos de aquel area de memoria.
Public Sub Main()
Dim p As Pointer
Dim st As Stream
Dim scribo, lego As Byte
Dim i As Integer
' Reservamos una cantidad de memoria de 8 byte:
p = Alloc(SizeOf(gb.Byte), 8)
' Creo una variable de tipo "Stream" para poder escribir y leer en el area apuntada por el Puntero "p":
st = Memory p For Read Write
'' ESCRIBIENDO
For scribo = 1 To 8
' Escribimos usando "Write"... como si fuera un File. Escribimos en este ejemplo valores de tipo "Byte".
Write #st, scribo As Byte
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Está claro que tenemos que volver al índice 0 del "stream", para leerlo desde el principio:
Seek #st, 0
'' LEYENDO
For lego = 1 To 8
' Leemos de el area de memoria reservada usando "Read"... como si fuera un File:
Read #st, lego
Print lego
Next
' Ahora podemos cerrar el flujo:
st.Close
Print
' Por supuesto, para LEER, podemos utilizar tambien la especifica funcion "Byte@()":
For i = 0 To 7 ' <---- Prestemos atención a el índice !!!
' Leemos de el area de memoria reservada usando "Byte@( )".
' Para avanzar en el índice interno del Puntero, tenemos que usar un valor de tipo " Integer " !
Print Byte@(p + i)
Next
' Terminando siempre tenemos que liberar el area de memoria ocupada:
Free(p)
End