AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Getter und Setter eines Records inlinen?

Ein Thema von Zacherl · begonnen am 15. Aug 2013 · letzter Beitrag vom 25. Aug 2013
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 19:59
Soweit ich weiß werden doch nur published Properties per RTTI zugänglich gemacht oder nicht?
Schon (zumindest früher, siehe unten), andererseits wäre es ja auch bei puplished Properties theoretisch kein Problem, dann müsste der Code halt zusätzlich noch mal extra im Programm stehen. Ich bin mir bei solchen Sachen nur nie sicher, wie schlau der Compiler wirklich ist...

Allerdings gibt es ja unter neueren Delphis (die ich nicht habe) auch noch diese erweiterte RTTI, ich weiß nicht ob die Regel mit published dort noch gilt.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 20:12
Soweit ich weiß werden doch nur published Properties per RTTI zugänglich gemacht oder nicht?
Schon (zumindest früher, siehe unten), andererseits wäre es ja auch bei puplished Properties theoretisch kein Problem, dann müsste der Code halt zusätzlich noch mal extra im Programm stehen.
Ja genau, das dachte ich mir auch. Konnte es beim Record leider auf die Schnelle nicht testen, da der überhaupt keine published Methoden erlaubt. Müsste man nochmal mit einer "normalen" Klasse prüfen.

Allerdings gibt es ja unter neueren Delphis (die ich nicht habe) auch noch diese erweiterte RTTI, ich weiß nicht ob die Regel mit published dort noch gilt.
Hat zumindest mal den Anschein. Habe an den RTTI Einstellungen jetzt nichts bewusst geändert.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.211 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Getter und Setter eines Records inlinen?

  Alt 15. Aug 2013, 22:55
Published ist der Extended RTTI ziemlich egal. Die kommt sogar an private Felder und Properties dran

Vor ein paar Monaten habe ich mich das auch laut gefragt (siehe: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public' und heraus kam, dass published praktisch nur für die Deklaration von VCL-Komponenten für das Speichern und Einlesen der Formulare notwendig ist.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 07:57
Records unterstützen eh nur die Sichtbarkeiten private und public.

Und die Enhanced RTTI ist auch in XE4 bisher unfähig Properties von Record types auszulesen (bzw die RTTI wird vermutlich gar nicht generiert - siehe QC 78110).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (16. Aug 2013 um 08:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#5

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 08:42
Sie wird für Felder, Attribute und Methoden von Records ausgelesen, aber nicht für Properties. Das sieht man auch sofort im Quelltext des Typs TRttiRecordType:
Delphi-Quellcode:
    function GetDeclaredFields: TArray<TRttiField>; override;
    function GetDeclaredMethods: TArray<TRttiMethod>; override;
    function GetAttributes: TArray<TCustomAttribute>; override;
Nicht überschrieben ist hingegen:
Delphi-Quellcode:
function TRttiType.GetDeclaredProperties: TArray<TRttiProperty>;
begin
  Exit(nil);
end;
Genauso wenig GetProperties.

Wenn ich das aber in der generierten .exe richtig lese, sind die Informationen dort durchaus vorhanden... es gibt nur offenbar in der RTTI keine Möglichkeit sie auszulesen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 08:51
Wenn ich das aber in der generierten .exe richtig lese, sind die Informationen dort durchaus vorhanden... es gibt nur offenbar in der RTTI keine Möglichkeit sie auszulesen.
Hast du noch weitere Infos bzgl des Formats, so dass man das nachrüsten kann?
VMT Hack für TRttiRecord Type um die GetDeclaredProperties Methode zu überschreiben ist ja kein Problem
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#7

AW: Getter und Setter eines Records inlinen?

  Alt 16. Aug 2013, 09:53
Die Struktur ist überschaubar, du findest sie ab Zeile 563 in TTypeData in System.Typinfo.pas als Kommentar...
Davor steht noch der Name des Recordtyps als Shortstring, aber der Pointer auf die Typinfo zeigt auf den Record selbst.

In dieser Struktur findet sich die Property aber nicht. Deshalb ist es nicht ganz so einfach...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (16. Aug 2013 um 09:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.
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