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
|