Ver Mensaje Individual
  #1  
Antiguo 18-01-2012
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Reputación: 0
Red_Leon Va por buen camino
Problema con Interfaces

Buenas compañeros,

Tengo un pequeto problema con las interfaces en Delphi 7/XE, aver si me pudieras echar una mano ya que no sé el porque puede estar pasando.

Tengo declarada una interface definida tal que así:

Código Delphi [-]
 IEjemplo=Interface
    ['{52E6DD18-D15B-46D6-AED1-F146A438C3AC}']
    { Public declarations }
    procedure proX;
  end;

Tengo varias clases que implementan este interface tal que asi:

Código Delphi [-]
Unit1

TClase1=class(TInterfacedObject, IEjemplo)
  public
    procedure proX;
  private
    ...
  end;

var
  ejemplo1:TClase1;

implementation

....

Unit2

TClase2=class(TInterfacedObject, IEjemplo)
  public
    procedure proX;
  private
    ...
  end;

var
  ejemplo2:TClase2;

....

Hasta aqui todo bien, con su teoria y todo.

Bien, pues me he creado un controler el cual dependiendo de la ocasión utilizará un interface o otro. El controller en resumidas cuentas es tal que así:

Código Delphi [-]

type

  TControllerE=class
  public
     ....
     constructor Create;
     procedure establecerInterface(index:Integer);
     ....
  private
     ....
    interface:IEjemplo;
     ....
     procedure llamarInterface;
     ....
  end;

implementation
   constructor TControllerE.Create;
   begin
      ejemplo1:=TClase1.Create;
      ejemplo2:=TClase2.Create;
      self.interface:=nil;
   end; 

   procedure TControllerE.establecerInterface(index:Integer);
   begin
      if (index=1) then
        self.interface:=ejemplo1
      else if (index=2) then
        self.interface:=ejemplo2
      else
        self.interface:=nil
   end;

   procedure TControllerE.llamarInterface;
   begin
      if (self.interface <> nil)  then self.interface.proX;  
   end;

Hasta aqui creo que actuo correctamente.

Y es resumidas cuentas se hace esto, pongamos en un botón;

Código Delphi [-]
  controlerE:=TControllerE.Create;
  controlerE.establecerInterface(1);
  controlerE.establecerInterface(2); 
  controlerE.establecerInterface(1);

El problema es que al restablecer el interface 1 me salta una Excepcion: ... EAccessViolation with the Message 'Access violation at Adress XXXXXX'...

¿Que estoy haciendo mal? En ningun momento libero los objetos ejemplo1, ejemplo2. Es más en debbug compruebo que tiene valor, pero al igualarlo a la variable interface es donde salta.

He estado mirando ejemplos y demás y no veo ninguno en el cual utilice los interfaces de esta manera.

¿Puede ser que le este dando un mal uso a los interface en Delphi?

Muchas gracias por adelantado.
Responder Con Cita