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...