Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Jugamos Con Memoria Reservada, Punteros Y Memory Stream
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Jugamos Con Memoria Reservada, Punteros Y Memory Stream 
 
Os presento un simple código con objetivo meramente didáctico, que quiere enseñar como debe ser programado un hipotético código gambas en caso de asignación de un área de memoria, apuntado por una variable de tipo Puntero, en el que escribir con los Memory Stream uno o más datos.

El proyecto muestra:

* dos TableView, que representan el área de memoria reservada en el que insertar a uno más valores (tipo Byte) y el número de índice de cada celda de la memoria reservada. Cada celda del TableView representa una celda de la memoria reservada. Arriba es indicado, como ya dije, el número de índice por cada celda de memoria.
* un TextArea que muestra el consiguiente código que debería ser escrito para conseguir la cantidad elegida de memoria reservada y los valores que se quiere escribir.

Al inicio será solicitada la cantidad de memoria, de 1 a 16, que debe ser reservada.
Para insertar los valores de tipo Byte, hará falta hacer clic en una celda, escribir por lo tanto el valor de tipo Byte, de 0 a255, y en fin presioar la tecla "Enter" del teclado.
Es posible escribir de nuevo un valor en una celda, que ya haya sido valorizada.

Private tv As TableView
Private ta As TextArea
Private chd As String
Private primus As Boolean
Private inx As Short = -1


Public Sub Form_Open()

  Dim b As Byte
  Dim index As TableView
    
    Do
      b = Val(InputBox("Elige la cantidad de memoria que debe ser reservada<BR>(min 1, max 16):", Null, "8"))
    Loop Until (b > 0) And (b < 17)
    
    With index = New TableView(Me)
      .X = 20
      .Y = 40
      .W = 500
      .H = 20
      .Rows.Count = 1
      .Rows.Height = index.H
      .Columns.Count = b
      .ScrollBar = 0
    End With
    For b = 0 To index.Columns.Count - 1
      With index
        .Columns.W = .W \ .Columns.Count
        .Columns[b].Alignment = Align.Center
        index[0, b].Text = CStr(b)
      End With
    Next
    
    With tv = New TableView(Me) As "TableView"
      .X = 20
      .Y = index.Y + index.H + 5
      .W = 500
      .H = 50
      .Rows.Count = 1
      .Rows.Height = tv.H
      .Columns.Count = b
      .ScrollBar = 0
    End With
    
    For b = 0 To tv.Columns.Count - 1
      With tv
        .Columns.W = .W \ .Columns.Count
        .Columns[b].Alignment = Align.Center
        tv[0, b].Text = "0"
      End With
    Next
    
    ImpostaTextArea(b)
    
    primus = True

End


Public Sub TableView_Click()

  tv.Edit

End


Public Sub TableView_Save(riga As Integer, col As Integer, valore As String)

  Dim sk As String

   If (valore = Null) Or (Len(valore) > 3) Or (Val(valore) > 255) Then Return
   If tv[0, tv.Column].Text = valore Then Return
   If tv.Columns.Count > 1 Then
     If (col > 0) And (tv.Column <> inx + 1) Then sk = "\n\n Seek #st, " & CStr(col)
     If (col = 0) And (primus = False) Then sk = "\n\n Seek #st, " & CStr(col)
   Endif
  
   tv[riga, col].Text = valore
  
   With ta
     .Text = Left(.Text, Len(.Text) - (Len(chd)))
     .Text &= sk & "\n Write #st, " & valore & " As Byte" & chd
   End With
  
   sk = Null
    
   primus = False
   inx = tv.Column

End


Private Procedure ImpostaTextArea(n As Byte)

  chd = "\n\n st.Close\n\n ......\n ......\n\n Free(p)"
  
  With ta = New TextArea(Me)
    .X = 20
    .Y = tv.Y + tv.H + 40
    .W = tv.W
    .H = 300
    .Text = "Dim p As Pointer\nDim st As Stream\n\n" &
            " p = Alloc(SizeOf(gb.byte), " & CStr(n) & ")\n\n" &
            " st = Memory p For Write" & chd
  End With
  
End

 



 
última edición por vuott el Martes, 06 Diciembre 2016, 10:37; editado 4 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Jugamos Con Memoria Reservada, Punteros Y Memory Stream 
 
Malvados punteros..

Esto tengo que leerlo con tranquilidad.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Jugamos Con Memoria Reservada, Punteros Y Memory Stream 
 
Shell escribió: [Ver mensaje]
Malvados punteros..


La variable de tipo Puntero se comporta como el Puntero interno del objeto File.

Un Puntero simplemente "apunta" a la primera celda de memoria de un area reservada.

Vamos a hacer una comparación.

Si tu tienes por ejemplo la palabra "Shell", y yo te pido que leas esta palabra, tu comienzas por supuesto desde la primera letra de la palabra, es decir "S".

Bueno, el Puntero apunta a la primera celda del area de memoria como los tus ojos que apuntan a la primera letra de la palabra.

Cuando usamos la función "Seek" - por ejemplo: "Seek #st, 2", es como si yo te digo: " Empieza leyendo desde la tercera letra de la palabra."
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Error:Out Of Memory En Servidor De Gambas... jsbsan Sobre Gambas-es 7 Martes, 30 Noviembre 2010, 14:57 Ver último mensaje
Capa
No hay nuevos mensajes Sensor De Temperatura De CPU Con Termómet... vuott Aplicaciones/Fragmentos de Código 18 Miercoles, 29 Octobre 2014, 23:18 Ver último mensaje
vuott
No hay nuevos mensajes Modificar A Uno O Más Carácteres De Una ... vuott Aplicaciones/Fragmentos de Código 2 Jueves, 30 Octobre 2014, 12:31 Ver último mensaje
vuott
No hay nuevos mensajes Liberar Completamente Una área De Memoria... vuott General 9 Martes, 13 Septiembre 2016, 23:48 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron