Ver Mensaje Individual
  #1  
Antiguo 16-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Reputación: 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