Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
Es de tres letras, pero no está escrita con letras.
Me dejaste pior

Cita:
Empezado por roman Ver Mensaje
Ja, ja, ja. Y mira que mis ojos pasaron por la solución más de una vez. Gracias Al, estuvo interesante

// Saludos
¿Ustedes son humanos?
Voy a tener que llamar al área 51 porque parece que se fugaron de allí. ¿Cómo le hacen para saber tantas cosas?

Evidentemente hay cosas que mi cabeza no logra entender y captar porque no tiene la preparación... pero esto... ¡se me hace que es más fácil encontrar la teoría unificadora de la física!

Supongo que en una semana van a dar conocer la solución ¿no? Porque me han dejado intrigado.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 25-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
He de decir que lo de las siglas sigo sin entenderlo, aunque el término maleable tampoco me convence mucho.

Lo que es cierto es que la respuesta es mucho más sencilla de lo que parece, tal como lo comentó Al desde un principio. También es elegante y segura de usar, no como mi segunda solución, que voy a esbozar para que los demás no tomen el camino equivocado:

Los campos en un objeto se acomodan de manera similar a un registro con un primer campo oculto que es la referencia a la clase a la que pertenece el objeto. Los campos aparecen en el orden en que están declarados y cada objeto guarda los campos de su clase y los de todas sus ancestras.

Así pues, el método "sucio" de acceder al campo X pasa por saber el offset o desplazamiento del campo en el objeto y acceder libremente:

Código Delphi [-]
ShowMessage(PInteger(Integer(Obj) + Offset)^);

Calcular dicho offset no es tan sencillo pues hay que tomar en cuenta el alineamiento que menciona Al. Sin embargo, puede hacerse examinando el código fuente de la clase. Si la clase tiene ancestros nos podemos ayudar con AncestroDeClaseDeObj.InstanceSize, ya que InstanceSize sí toma en cuenta el alineamiento. Aún así, hay que examinar los campos de la clase final hasta llegar a X.

// Saludos
Responder Con Cita
  #3  
Antiguo 25-02-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¡¡¡ ¿¿¿Ya lo han descubierto??? !!!

Yo es que no he entendido las pistas, que parecen encriptadas
Responder Con Cita
  #4  
Antiguo 25-02-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Ahora que leo lo comentado por Román veo que mi idea estaba bien encaminada, por eso dije:
Cita:
Empezado por Casimiro Notevi
No estoy muy seguro, pero creo que en lenguaje C sería más fácil
Lo dije porque en lenguaje C conozco en profundidad cómo manejar los punteros, pero en Delphi todavía no me he enterado, de verdad
Responder Con Cita
  #5  
Antiguo 25-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pero ojo, la solución que esbocé no es la que busca Al.

// Saludos
Responder Con Cita
  #6  
Antiguo 25-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Román, me alegra mucho tener la certeza de que has llegado a la misma solución que yo.

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Lo dije porque en lenguaje C conozco en profundidad cómo manejar los punteros [...]
Ah, perdón Casi, yo creí que eso había sido un intento de provocación.

Amigos, reitero lo dicho. La cosa no requiere de meterse a las entrañas de la memoria o hacer desplazamientos de punteros y cosas de tan profundo nivel.





Marcelo, no será necesario practicarle ningún exorcismo a ecfisa para encontrar las tres letras que te ayudarán a resolver...








Responder Con Cita
  #7  
Antiguo 25-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González Ver Mensaje
La cosa no requiere [...] hacer desplazamientos de punteros
Je, je. Cuidado con lo que dices

// Saludos
Responder Con Cita
  #8  
Antiguo 25-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, aunque sabía la solución, no me decidía por la forma de implementarla. Aquí pongo una opción.

Contestando a

Cita:
Empezado por Al González
La pregunta es: ¿Qué podemos colocar en lugar de ese asterisco para que el mensaje mostrado por ShowMessage diga la verdad, y qué código habría que escribir para lograrlo? Desde luego, sin modificar los fuentes de la VCL.
En lugar del asterisco colocamos

Código Delphi [-]
ShowMessage ('El valor de Obj.X es: ' + IntToStr (GetLastRequestedSize));

y el código que hay que escribir está en el archivo adjunto.

La contraseña, para quien quiera ver la solución, es el tipo de datos (todo en minúsculas) involucrado

Por cierto, del primer intento (fallido) de solución, que tenía que ver con las funciones del Heap, sale este koan:

Cita:
No es lo mismo el último tamaño de bloque solicitado que el tamaño del último bloque solicitado.
// Saludos
Archivos Adjuntos
Tipo de Archivo: zip Reto2011.zip (455 Bytes, 16 visitas)
Responder Con Cita
  #9  
Antiguo 26-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Señores: Confirmado, Román ha sido el primero en resolver el problema satisfactoriamente.

¡Enhorabuena!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dudas sobre Delphi 2011 cmm07 Varios 9 15-01-2011 14:48:06
Lazarus Vs. Delphi 2011 (2012? 2014?) gatosoft Debates 33 14-08-2010 21:12:05
Delphi 2011 (Fulcrum) heroe Noticias 11 15-07-2010 10:00:21
delphi 2011 JXJ Noticias 13 03-04-2010 00:42:34


La franja horaria es GMT +2. Ahora son las 16:19:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi