Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: TRTTIMethod.Invoke eines Interface ausführen

  Alt 8. Nov 2022, 22:24
OK, wenn es NUR "Eigenes" ist,
aber ALLE Interfaces implementieren 3 Funktionen für die Speicherverwaltung,
und Zwei davon treffen auf deine Bedingungen zu. (hat Result und keine Parameter)

Delphi-Quellcode:
  IInterface = interface
    ['{00000000-0000-0000-C000-000000000046}']
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  end;
Zitat:
Interface auf ein nicht mehr existierendes Object referenziert
Wenn man nicht an der Speicherverwaltung rumpfuscht, kann sowas eigentlich nicht passieren,
denn Interfaces räumen sich selbst auf, wenn keine Variable mehr auf sie zeigt.

OK "eigentlich" ... auch viele TComponent implementieren Interfaces, aber dort mit deaktivierter Referenzzählung (_AddRef und _Release machen nichts),
also dort hat nicht das Interface die Controlle, sondern die VCL und solche Interface-Zeiger können wirklich ins Nirvana zeigen.
(drum sollte man an dieser Stelle das Interface nur kurz nutzen)

PS: Unter Anderem dafür gibt es das [unsafe].
https://blog.marcocantu.com/blog/201...eferences.html
https://dalijap.blogspot.com/2022/11...s-part-ii.html



Abgesehn von so Dingen wie bei TComponent,
sollte man es möglichst vermeiden gleichzeitig Interface- und Objekt-Referenzen zu haben.
So gibt es auch keine potentiellen Streitigkeiten, wer das Objekt aufräumt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Nov 2022 um 22:26 Uhr)
  Mit Zitat antworten Zitat