Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 21-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Dale de una ves con la segunda pista...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #22  
Antiguo 24-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
¿Y bien? ¿Qué ha sido de esto?

Creo saber cómo resolverlo aunque me desconcierta lo del GetMem pues con mi "solución" bastaría cualquier función/método que no altere el valor de X.

// Saludos
Responder Con Cita
  #23  
Antiguo 24-02-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
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
Cita:
Empezado por roman Ver Mensaje
Creo saber cómo resolverlo aunque me desconcierta lo del GetMem pues con mi "solución" bastaría cualquier función/método que no altere el valor de X.
Hola Román. Como sucede con cualquier problema de programación, estoy seguro que debe haber más de una solución a esto, pero algunas funciones nativas son algo maleables.

Cita:
Empezado por rgstuamigo Ver Mensaje
Dale de una vez con la segunda pista...
Ya lo hice, la segunda pista fue:
Cita:
Empezado por Al González Ver Mensaje
Esto no tiene mucha ciencia, creo que en cualquier momento alguien nos sorprenderá con la solución. Pero está bien, les daré una segunda pista sólo porque estamos a la mitad del camino.
Tercera pista: Tu mensaje, rgstuamigo, está en otra mitad de la primera pista, la cual aparece, por supuesto, antes de la segunda.
Responder Con Cita
  #24  
Antiguo 24-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
Ya suponía yo que en el aviso en sí de la segunda pista estaba la pista. Sólo que a mi no me dice nada ni la primera, ni la segunda, ni la tercera, por lo que supongo que son caminos distintos. La solución que vislumbro consiste sencillamente en acceder al campo privado X. Cosa que es posible si se conoce el código fuente de la clase, que me parece es una de las premisas. Aunque no es una solución elegante y no la usaría en un programa

Agrego: Pensándolo bien, quizá sí esté en el mismo camino pues algo de lo que mencionas sí lo uso.

// Saludos
Responder Con Cita
  #25  
Antiguo 25-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pues coincido con Roman al decir que "consiste sencillamente en acceder al campo privado X". Y aquí se me encendió la lucecita y pregunto:

¿Se ha compilado con información de depuración o sin ella?

¡Zasca! Seguro que no se lo esperaba, maestro González.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #26  
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.604
Poder: 30
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
Cita:
Empezado por Al González Ver Mensaje
No vale el uso de moldes de acceso tipo:

Código Delphi [-]
T1Acceso = Class (MismoPadreQueT1)
  ...
  X :Integer;
End;
...Ni algún otro truco inseguro y poco recomendable de "calcado" de campos o instrucciones máquina.

No hay información de depuración porque el programa ha sido compilado para producción, y un campo como X no genera RTTI.

Mejor sigan la pista #1, si bien esto es prescindible para llegar a lo que esa sigla significa.
Responder Con Cita
  #27  
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
Ja, ja, Pero eso ya es demasiado. Es como si un profesor te impidiera usar una solución aún siendo válida

Para mi que Ñuño y yo ya lo resolvimos, lero, lero.

// Saludos
Responder Con Cita
  #28  
Antiguo 25-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Yo por algo preguntaba sobre cierta sigla de 4 letras

Y estoy re perdido. Esas pistas para mi ni Arthur Conan Doyle se las imagina para las aventuras que ha escrito; que me han resultado complicadas de sacarle algo

Yo de este reto mejor paso, que tengo mi cabeza pensando en mis propios retos... y en los del mecánico que me ajusta los tornillos

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #29  
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
Yo no sé ni a que sigla se refiere. Es más, ni siquiera sé cuál es la primera pista, y la tercera mejor ni releerla porque da dolor de cabeza

// Saludos
Responder Con Cita
  #30  
Antiguo 25-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Yo no sé ni a que sigla se refiere. Es más, ni siquiera sé cuál es la primera pista, y la tercera mejor ni releerla porque da dolor de cabeza

// Saludos
Pues esto es una chunga amigo... yo me quedé pensando ¿a que sigla apunta Al? Yo al comienzo del hilo ya había dicho sobre una sigla, 4 letras... a lo que apuntaba en ese entonces es a RTTI pero si de plano no es la vía entonces...

Más que reto, se me hace una adivinanza

Y si a ti te da dolor de cabeza, entonces ¿a mi?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #31  
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.604
Poder: 30
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
Cita:
Empezado por Al González Ver Mensaje
Hola Román. Como sucede con cualquier problema de programación, estoy seguro que debe haber más de una solución a esto, pero algunas funciones nativas son algo maleables.
Y la idea es aprovechar esa flexibilidad de la función en cuestión.

Cita:
Empezado por roman Ver Mensaje
Ya suponía yo que en el aviso en sí de la segunda pista estaba la pista. Sólo que a mi no me dice nada ni la primera, ni la segunda, ni la tercera, por lo que supongo que son caminos distintos.
No, las tres pistas se dirigen por el mismo camino.

Cita:
Empezado por roman Ver Mensaje
La solución que vislumbro consiste sencillamente en acceder al campo privado X. Cosa que es posible si se conoce el código fuente de la clase, que me parece es una de las premisas. Aunque no es una solución elegante y no la usaría en un programa
Bueno, si aún así la consideras válida, no tiene por qué ser rechazada. Puedes publicarla si gustas.

Cita:
Empezado por Delphius Ver Mensaje
Yo por algo preguntaba sobre cierta sigla de 4 letras
Es de tres letras, pero no está escrita con letras.
Responder Con Cita
  #32  
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
Y la idea es aprovechar esa flexibilidad de la función en cuestión.
Ja, ja, ja. Y mira que mis ojos pasaron por la solución más de una vez. Gracias Al, estuvo interesante

// Saludos
Responder Con Cita
  #33  
Antiguo 25-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
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
  #34  
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
  #35  
Antiguo 25-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡¡¡ ¿¿¿Ya lo han descubierto??? !!!

Yo es que no he entendido las pistas, que parecen encriptadas
Responder Con Cita
  #36  
Antiguo 25-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi 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
  #37  
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
  #38  
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.604
Poder: 30
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
  #39  
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
  #40  
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
Respuesta



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:09:41.


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