Delphi-Quellcode:
(PopupWindow as ISkinPopupWindow).Free
PopupWindow := Nil;
Du meinst as TSkinPopupWindow, oder?
Aber ob mit oder ohne Referenzzählung, das kann nicht funktionieren. Sobald noch irgendwo ein Interface auf dieses schon freigegebene Objekt existiert, wird beim Finalisieren der Anwendung darin das _Release aufgerufen. Ist das Objekt schon freigegeben, passiert das auf diesem schon freigegebenen Objekt. Im günstigsten Fall knallt es direkt, z.B. wenn FastMM eingebunden ist, im ungünstigsten zerschießt du den Speicher und es knallt ganz woanders.
Ein beliebtes Problem ist, dass ein Interface an eine
DLL übergeben wird oder umgekehrt, aber beim Beenden nicht sauber wieder getrennt wird. Insbesondere kann ein Interface, das aus einer
DLL kommt, in der Anwendung übrig bleiben, wenn die
DLL entladen wird. Deshalb gibt es bei uns Shutdown-Prozeduren, in denen Listener usw. entfernt werden, so dass nach dem Entladen der DLLs keine Leichen übrig bleiben.
Eine andere Möglichkeit wäre, dass du irgendwo ein Objekt als Objekt und Interface parallel nutzt.
Solche Probleme kannst du mit FastMM aber oft schon direkt finden.