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}']
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.