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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Referencia al objeto desde la interfaz

Hola!!!

Supongamos que tenemos un método del siguiente estilo:

Código:
procedure Add(o: IMyInterface);
Como puedo hacer para conseguir un puntero al objeto, no a la interfaz que me están pasando. Imaginemos que dentro de este procedure lo que quiero es añadir el parámetro a un TObjectList. Necesito pasarle una referencia a objeto, no a interfaz. He probado a hacer un cast a TObject, a TInterfacedObject, declarar la referencia a objeto y pasarsela a QueryInterface del parámetro, ... He conseguido hacer que compile, el problema es que cuando inteto acceder a propiedades de la classe original, no de la interfaz, da un acces violation. Os pongo una de las maneras que lo he hecho:

Código:
procedure TMiClasse.Add(o: IMyInterface);
var
  Temp: TInterfacedObject;
begin
  if Succeeded(o.QueryInterface(IMyInterface, Temp)) then
  begin
    ShowMessage(Temp.ClassName);
    FList.Add(Temp);
  end;
end;
Ese código compila, pero al intentar el showmessage lanza el access violation. Creo que lo que pasa es que no estoy consiguiendo que Temp apunte al objeto, si no a su "trozo" que implementa la interfaz.
En fin... estoy empezando a programar con interfaces en Delphi (en java la cosa no es tan complicada) y supongo que estoy cometiendo algun error conceptual, así que estoy abierto a todas vuestras explicaciones...
__________________
E pur si muove
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 11:55:46.


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