Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
Puede Una Instancia De Una Clase Suicidarse?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
Claro, es cierto.

Pero estoy seguro que hay una funcion oculta que libera un objeto y puede llamarse desde si mismo.

La secuencia de trabajo completa es la siguente:
' en alguna parte
Public perros as New Object[]


Public Sub Main()

Dim NewDog as clsPerro
Dim batuque as New clsPerro("La vida es muy complicada")

perros.Add(batuque)

NewDog = perros.Last     ' esto es una referencia al objeto real

NewDog.Pensar()

If NewDog Then Message("Pero todavia estoy vivo")

NewDog.Freud = "Las perras me ignoran"

' quiero que NewDog = Null aqui , y que ademas el objeto este liberado de la memoria
 



la clase clsPerro es
' clsPerro
Public KillMeSoftly as Boolean = False
Public Freud as String

Public Sub _New(pensamiento as String)
    Freud = pensamiento
End

Public Sub Pensar()

If Freud = "Las perras me ignoran" then Me.KillMeSoftly = True   ' yo no se quien es NewDog, es solo una referencia a este objeto que esta en alguna parte

End

 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
tercoIDE escribió:  
Pero estoy seguro que hay una funcion oculta que libera un objeto y puede llamarse desde si mismo.

Muy probable.
Habría que estudiar detenidamente las fuentes de bajo nivel de este tema.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
basic-stop-golden-digging-kush-620x349atabc
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
Esattamente !  


¡Espero que no acabe así!  

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
vuott escribió:  
De bajo nivel nosotros podemos alterar fácilmente la estructura interna principal de la Clase   , pero causaríamos el crash del programa... es como decir: "Muera Sansón con los Filisteos !".  

En general un Objeto está formado por una Estructura principal, llamada "GB_BASE" que puedes ver en el archivo fuente .../main/share/gambas.h.
(Mira tambien la Estructura "Struct OBJECT" en el archivo: .../main/gbx/gbx_object.h)
Bueno, esta Estructura en sus primeros 8 byte tiene la dirección de memoria de otra Estructura, llamada "_CLASS" que puedes ver en el archivo fuente .../main/gbx/gbx_class.h.

Basta con borrar la dirección de memoria de la Estructura Struct _Class, poniendo a cero aquellos primeros 8 bytes de la estructura principal GB_BASE) para hacer inservible estas Estructuras mismas.

Exemplum maximum.
Pongamos un Botón en un Formulario y este codigo:
Public Sub Form_Open()

  Dim p1 As Pointer
  Dim st As Stream
  
  p1 = Object.Address(Button1)    ' Aquí hemos penetrado en la Estructura principal "Struct GB_BASE"
  
' Vamos a leer el nombre del Objeto "Button1":
  Print Button1.Name
  
' Ponemos a CERO los primeros ocho bytes de la Estructura principal "Struct GB_BASE"
   st = Memory p1 For Write
   Write #st, &00 As Pointer
   st.Close

' Ahora intentemos de nuevo leer el nombre del Objeto "Button1":
  Print Button1.Name

End

...Requiem aeternam dona eis......  
 



 
última edición por vuott el Jueves, 23 Abril 2020, 00:10; editado 4 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
has ido a las entrañas de la tierra

corteza-tierra
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
tercoIDE escribió:  
has ido a las entrañas de la tierra

...quieres conocer el nombre de la "Clase", a la que pertenece el Objeto "Button1" ?
Este nombre està escrito en el 5° miembro de la Estructura "_CLASS", que puedes ver en el archivo fuente .../main/gbx/gbx_class.h .

Prueba este codigo:
Public Sub Form_Open()

  Dim p1, p2, p3 As Pointer
  
  p1 = Object.Address(Button1)    ' Ahora estamos en "Struct GB_BASE"
  
  p2 = Pointer@(p1)                      ' Ahora estamos en "Struct _CLASS"
  
' Con la aritmética de los Punteros avanzamos 24 bytes a lo largo del área de memoria de la estructura "Struct _CLASS"  y
' penetramos en el miembro llamado "name" de "Struct _CLASS", es decir el 5° miembro de esta Estructura.
  p3 = Pointer@(p2 + 24)
  
' Vamos a leer el nombre la "Clase", a la que pertenece el Objeto "Button1":
  Print String@(p3)
  
End

...y otras cosas así.
 



 
última edición por vuott el Jueves, 23 Abril 2020, 01:19; editado 4 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
vuott escribió:  
tercoIDE escribió:  
has ido a las entrañas de la tierra

...quieres conocer el nombre de la "Clase", a la que pertenece el Objeto "Button1" ?
Este nombre està escrito en el 5° miembro de la Estructura "_CLASS", que puedes ver en el archivo fuente .../main/gbx/gbx_class.h .

Prueba este codigo:
Public Sub Form_Open()

  Dim p1, p2, p3 As Pointer
  
  p1 = Object.Address(Button1)    ' Ahora estamos en "Struct GB_BASE"
  
  p2 = Pointer@(p1)                      ' Ahora estamos en "Struct _CLASS"
  
' Con la aritmética de los Punteros avanzamos 24 bytes a lo largo del área de memoria de la estructura "Struct _CLASS"  y
' penetramos en el miembro llamado "name" de "Struct _CLASS", es decir el 5° miembro de esta Estructura.
  p3 = Pointer@(p2 + 24)
  
' Vamos a leer el nombre la "Clase", a la que pertenece el Objeto "Button1":
  Print String@(p3)
  
End

...y otras cosas así.


Esto es el centro mismo de la tierra  

El problema que yo veo usando ese bajo nivel es que si en alguna futura version de Gambas4 cambia GB_Class.h , nuestro programa dejara de funcionar.
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Puede Una Instancia De Una Clase Suicidarse? 
 
tercoIDE escribió:  
El problema que yo veo usando ese bajo nivel es que si en alguna futura version de Gambas4 cambia GB_Class.h , nuestro programa dejara de funcionar.

Por supuesto.
Todo lo que hice fue mostrar una curiosidad.
 



 
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 Puede Una Clase Saber Quien La Instancio? ... osunaosuna Controles/Librerías/Componentes 11 Martes, 08 Julio 2014, 08:34 Ver último mensaje
osunaosuna
No hay nuevos mensajes Averiguar Si Un Objeto Es Una Instancia De... Shell General 0 Domingo, 30 Julio 2017, 01:30 Ver último mensaje
Shell
No hay nuevos mensajes No Se Puede Ejecutar Proceso Hijo, No Se P... Shell General 4 Miercoles, 23 Enero 2019, 00:39 Ver último mensaje
Shell
No hay nuevos mensajes ¿ Puede Una Clase Negarse A Construir Un ... Shell General 0 Sabado, 11 Abril 2020, 13:33 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
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