Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2011
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
Punteros a Procesos (procedures)

Hola, les comentos que tengo el siguiente problema:

Estoy haciendo una aplicacion, donde tengo varios procesos, con la siguiente estructura:

Código Delphi [-]
procedure proceso1();
begin
end;

procedure proceso2();
begin
end;
 .........
procedure x();
begin
end;

y necesito saber la direccion en memoria de algun proceso en particular, se que se hace por punteros, pero soy nuevo en delphi y aun no he trabajado con ellos.

De momento tengo el siguiente codigo para hacer pruebas.

Código Delphi [-]
procedure proceso1();
begin

end;

procedure memoria();
var
puntero: procedure();
begin
puntero:=proceso1;
end;

Entonces, no se si sea correcto la anterior expresion, no me generar ningun tipo de error, entonces las preguntas son:

Estoy capturando la direccion en memoria del proceso1?
si es asi como imprimo la direccion, en un tlabel o un ShowMessage?

De antemano muchas, gracias.
Responder Con Cita
  #2  
Antiguo 03-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código Delphi [-]
type
   TProc1 = procedure;

procedure PP;
begin
  Beep;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Proc: TProc1;
begin
  // Asigno el puntero de un procedimiento
  Proc:= @PP;
  // Con ese puntero puede ejecutar el procedimiento
  Proc;
  // Y muestro su dirección en hexadecimal
  ShowMessage(IntToHex(Integer(@PP), 8));
end;


Saludos
Responder Con Cita
  #3  
Antiguo 03-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Estoy capturando la direccion en memoria del proceso1?
si es asi como imprimo la direccion, en un tlabel o un ShowMessage?
Hola gersojn.

En la asignación: puntero:=proceso1; estas capturando la dirección del procedimiento proceso1, en la variable puntero .

Un ejemplo para mostrar la dirección:
Código Delphi [-]
type
  TProcedurePtr = procedure;

procedure proceso1;
begin
//...
end;

procedure proceso2;
begin
//...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p1,p2: TProcedurePtr;
begin
  p1:= @proceso1;
  p2:= @proceso2;
  ShowMessage(Format('%p %p',[@p1, @p2]));
  // O en decimal
  ShowMessage(Format('%d %d',[ULong(@p1),ULong(@p2)]));
end;

Saludos.

Casi al mismo tiempo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-08-2011 a las 20:51:10. Razón: añadir comentario
Responder Con Cita
  #4  
Antiguo 03-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Casi al mismo tiempo
Sip, es que cuando las cosas son de una manera sólo pueden ser de esa manera .

PD ¿Me pareció leer... Casi lo mismo y casi al mismo tiempo?

Saludos.
Responder Con Cita
  #5  
Antiguo 03-08-2011
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Poder: 13
gersojn Va por buen camino
gracias por la respuesta

Gracias por la respuesta, lo imprimi con un:
ShowMessage(Format('%p',[@puntero]));

Gracias por responder.
Responder Con Cita
  #6  
Antiguo 03-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por escafandra Ver Mensaje
PD ¿Me pareció leer... Casi lo mismo y casi al mismo tiempo?
Leiste bién , pero como usaste una función diferente para mostrarlo (y por lo tanto otra alternativa) me pareció adecuado corregirlo para que quede destacado.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Punteros kotai Varios 1 09-08-2010 16:26:34
uso de punteros David OOP 19 14-12-2009 09:48:37
C++ y los punteros marcoszorrilla La Taberna 3 02-06-2008 18:31:11
Punteros davitcito Varios 2 25-04-2005 22:46:24
Punteros rafadrover OOP 8 18-09-2003 10:09:47


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


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