Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RTTI Attribute verändern (https://www.delphipraxis.net/180262-rtti-attribute-veraendern.html)

himitsu 6. Mai 2014 13:50

AW: RTTI Attribute verändern
 
Ja, ich war mir auch sicher, daß die RTTI (an vielen Stellen) ein Singleton verwenden und die Daten daher nur einmal vorkommen.
Darum hatte ich auch schon Probleme, wenn man die neue RTTI in Threads verwendet.


Aber, wie du am code siehst, hab ich das Create/Destroy des Attributes quasi geloggt und genau da erkennt man, daß es zwei Mal erstellt wird und nach dem "End" auch zwei Mal freigegeben.
Außerdem ist beim letzen Auslesen der zugewiesene Wert weg (ist ja auch die zeite instanz).

Stevie 6. Mai 2014 15:49

AW: RTTI Attribute verändern
 
Zitat:

Zitat von himitsu (Beitrag 1258144)
Aber, wie du am code siehst, hab ich das Create/Destroy des Attributes quasi geloggt und genau da erkennt man, daß es zwei Mal erstellt wird und nach dem "End" auch zwei Mal freigegeben.
Außerdem ist beim letzen Auslesen der zugewiesene Wert weg (ist ja auch die zeite instanz).

Bei mir ebend nich (XE). Da wird das Create nur einmal aufgerufen.

himitsu 6. Mai 2014 16:30

AW: RTTI Attribute verändern
 
Aber XE(1) sollte doch XE(1) sein? :gruebel:

himitsu 6. Mai 2014 17:19

AW: RTTI Attribute verändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sehr eigenartig.

Ich hab das jetzt nochmal in einer einzelnen Anwendung getestet und hier im XE3 gibt es nur eine Instanz. :gruebel:

Stevie 6. Mai 2014 22:52

AW: RTTI Attribute verändern
 
Zitat:

Zitat von himitsu (Beitrag 1258190)
Sehr eigenartig.

Ich hab das jetzt nochmal in einer einzelnen Anwendung getestet und hier im XE3 gibt es nur eine Instanz. :gruebel:

Und genau diese Anwendung soll unter deinem XE eine andere Ausgabe liefern? Bei mir nicht.
Dann kann das nur an irgendeiner Compileroption liegen, durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.

Wenn du das herausfinden willst debug halt mal mit debug dcus in Zeile 151.

himitsu 6. Mai 2014 22:59

AW: RTTI Attribute verändern
 
Zitat:

Zitat von Stevie (Beitrag 1258212)
durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.

Im Prinip wäre es ja so eigentlich doch auch richtig?
Das Context-Interface in der Variable sollte ja erst freigegeben werden, bevor das Andere dort rein kommt. :gruebel:

Nja, massig Debuginfos, Eurekalog usw.. Da könnte es sich eventuell doch etwas am Verhalten ändern.

Stevie 6. Mai 2014 23:07

AW: RTTI Attribute verändern
 
Zitat:

Zitat von himitsu (Beitrag 1258213)
Zitat:

Zitat von Stevie (Beitrag 1258212)
durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.

Im Prinip wäre es ja so eigentlich doch auch richtig?
Das Context-Interface in der Variable sollte ja erst freigegeben werden, bevor das Andere dort rein kommt. :gruebel:

Nja, massig Debuginfos, Eurekalog usw.. Da könnte es sich eventuell doch etwas am Verhalten ändern.

Es wird halt erst Create aufgerufen und dann CopyRecord:

Code:
Unit16.pas.151: Rtti := TRttiContext.Create;
004EA99C 8D8514FFFFFF    lea eax,[ebp-$000000ec]
004EA9A2 E8A197FDFF      call TRttiContext.Create
004EA9A7 8D9514FFFFFF    lea edx,[ebp-$000000ec]
004EA9AD 8D45F8           lea eax,[ebp-$08]
004EA9B0 8B0D90754B00     mov ecx,[$004b7590]
004EA9B6 E8B5D5F1FF      call @CopyRecord


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Seite 2 von 2     12   

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