Ver Mensaje Individual
  #2  
Antiguo 18-01-2012
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Reputación: 16
LoPiTaL Va por buen camino
Hola,
El problema es que los objetos que implementan interfaces llevan un conteo del nº de referencias que apuntan a ellos (mira en detalle la implementación de TInterfacedObject, los métodos _AddRef y _Release). Cuando el nº de referencias es 0, entonces se autodestruyen.

Cuando asignas self.interface:=ejemplo1, entonces ejemplo1.RefCount vale 1.
Cuando asignas self.interface:=ejemplo2, entonces ejemplo1.RefCount pasa a valer 0, autodestruyéndote ejemplo1.
Cuando vuelves a asignar self.interface:=ejemplo1, entonces ejemplo2.RefCount pasa a valer 0, autodestruyéndote ejemplo2, y interface pasa a referenciar a un sitio en el que no hay nada (se autodestruyó anteriormente) y de ahi la excepción.

Para el ejemplo que estás dando, yo usaría lo mismo, pero en lugar de derivar interfaces, derivaría de una clase común, del estilo:

TClasePadre=class
procedure proX; virtual; abstract;
end;

y tu puntero en lugar de ser de tipo IEjemplo, sería de tipo TClasePadre.

Un saludo,
LoPiTaL
Responder Con Cita