Meine Variante b) von Oben ist eigentlich eine einfache Möglichkeit Objektvariablen und Interfaces zu mischen.
Wenn das Objekt z.B. in einem Formular eingebettet ist, dann reicht es:
Delphi-Quellcode:
private
FMyObj: TObject; // Objektvariable
FIMyObj : IUnknown; // Interfacepointer (darf auch ein anderes Interface sein z.B. IPValues)
procedure TForm1.FormCreate;
begin
FMyObj:= TObject.Create;
FIMyObj := FMyObj as IUnknown;
end;
Du brauchst dich ab jetzt selbst nicht mehr um die Freigabe kümmern. (Create and Forget)
Wenn das Formular zerstört wird, wird auch FIMyObj entfernt und alles ist in Butter.
Das Gleiche gilt ganz allgemein für Objekte, die in einem anderen Objekt eingebettet sind.
Du kannst auch den Sourcecode von
TComponent anschauen und besonders auf VCLComObject achten.
TComponent ist so eine Art Zwitterwesen, dass einmal als normales Objekt arbeitet aber auch der Referenzzählung von
COM unterliegen kann.
Der "Trick" von oben ist aber deutlich einfacher.