Ich glaube Du bist auf den einzigen Fehler gestoßen, den Delphi bei Interfaces in Bezug auf die Automatische Referenzzählung besitzt.
Das Problem ist, das Du dir einen Zeiger auf das Objekt merkst, jedoch als Rückgabewert der Funktion einen Interfacezeiger lieferst. Wird der zurückgegebene Interface-Zeiger nicht mehr benötigt, geht der Ref-Counter auf 0 zurück und das Objekt wird freigegeben. Jedoch merkst Du dir den zeiger auf das (nicht mehr vorhandene) Objekt. Und das wird nicht zurückgesetzt.
Lösung 1: Nimm als Modulvariable ein ITest statt einem TTest
Lösung 2: Zurücksetzen der Modulvariable im Destruktur
Delphi-Quellcode:
destructor TTest.Destroy;
begin
FTest := nil;
inherited;
end;
Lösung nicht getestet, jedoch aufgrund eigener Erfahrungen müsste das dein Problem lösen.