Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie lange sind Instanzen der TRttiMember gülig? (https://www.delphipraxis.net/213941-wie-lange-sind-instanzen-der-trttimember-guelig.html)

himitsu 23. Okt 2023 18:53

Delphi-Version: 11 Alexandria

Wie lange sind Instanzen der TRttiMember gülig?
 
Moin Moin,

wenn ich mir die RTTI-Instanzen von Methoden, Property oder Feldern in einer Variable speichere,
also z.B.
Delphi-Quellcode:
X := TRttiContext.Create.GetType(FOwner.ClassType).GetMethod(FName);
,
TRttiMethode, TRttiProperty oder TRttiField

Kann man dieses dann längere Zeit nutzen?
Also auch in anderen Methoden einer Klasse, wenn das im Contruictor erstellt/gesucht wurde.

Irgendwie scheint das wohl nicht zu funktionieren.
Kurz sofort danach, in anderer Methode, oder auch in 5 Minuten immernoch.


Ich dachte mir eingentlich, dass es doch schwachsinnig wäre, überall jedes Mal komplett neu suchen zu müssen, um diese Instanzen nutzen zu können.
(Invoke, bzw. GetValue und SetValue)

Uwe Raabe 23. Okt 2023 21:08

AW: Wie lange sind Instanzen der TRttiMember gülig?
 
Standardmäßig sind die Instanzen nur solange gültig, wie der
Delphi-Quellcode:
TRTTIContext
im Scope ist. Allerdings kann man das auch gezielt mit
Delphi-Quellcode:
TRTTIContext.KeepContext/DropContext
steuern.

himitsu 23. Okt 2023 23:15

AW: Wie lange sind Instanzen der TRttiMember gülig?
 
Jupp, auf die Idee war ich dann auch gekommen, den Context aufzuheben.

Man hätte ja denken können, dass die Member sich auch eine Referenz darauf behalten.



Hatte erst versucht Name und Typ zu speichern und überall neu zu suchen, aber das mit dem Kontext scheint zu klappen.


Schade, dass Emba für IDispatch und vor allem IDispatchEx scheinbar nichts mitbringt, um ein Delphi-Objekt automatisch mappen zu lassen.
Selbst bauen ist schon bissl aufwändig, besonders, da die Doku bei Microsoft diesbezüglich auch nicht so rosig aussieht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz