AGB  ·  Datenschutz  ·  Impressum  







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

zu manchen Records gibt es keine Rtti

Ein Thema von charly52 · begonnen am 22. Jul 2022 · letzter Beitrag vom 25. Jul 2022
Antwort Antwort
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

zu manchen Records gibt es keine Rtti

  Alt 22. Jul 2022, 15:47
Delphi-Version: 10.4 Sydney
Hi All,

ich muss eine alte SW REST-Full machen. Die Daten in JSON wandeln.
Habe mich durch zig Foren und Beitäge gewühlt und festgestellt, daß alle bloß Klassen serialisieren.
Mit Infos zu Records sieht es recht mau aus. Oder ich habe falsch gefragt

habe aber u.a. in:
https://github.com/RRUZ/blog/tree/ma...xplorer%20Lite ein nettes Prog gefunden um diverse Rtti anzuzeigen.

Mein Problem ist jetzt bei diesen beiden Strukturen (und vielen anderen mehr)

Delphi-Quellcode:
   D_DatRecTyp = RECORD
                          D_BuildStr : BuildStr; {hier neu seit A006}
                          D_AbtlDabei : D_AbtlDabeiTyp;
                          D_AbtlZuord : D_AbtlZuordTyp;
                          D_InstDabei : D_InstDabeiTyp;
                          D_InstKenn : D_InstKennTyp; {0 = allgemein, 1 Med.Inst}
                          D_InstZuord : D_InstZuordTyp;
                          D_FallDabei : D_FallDabeiTyp;
                          D_FallZuord : D_FallZuordTyp; {dummy ?}
                          D_AbtlFall : D_AbtlFallTyp;
                          D_FreigabeF : D_FreigabeFTyp;
                          D_FreigabeI : D_FreigabeITyp;
                          D_RepFreiAb : D_RepFreiAbTyp;

                          D_AnschafM : D_AbtlDrealTyp; {alle MVZ neu seit A005}
                          D_InvestiM : D_AbtlDrealTyp;
                          D_InstndM : D_AbtlDrealTyp;
                          D_VerwaltM : D_AbtlDrealTyp;
                          D_LebensmM : D_AbtlDrealTyp;
                          D_TechnikM : D_AbtlDrealTyp;
                          D_MVZ_EignPaAntNormal : D_AbtlDrealTyp;
                          D_MVZ_EignPaZusErlNorm: D_AbtlDrealTyp;
                          D_MVZ_EignPaAntWahl : D_AbtlDrealTyp;
                          D_MVZ_EignPaZusErlWahl: D_AbtlDrealTyp;
                          D_MVZ_EignPaVersTage : D_AbtlDrealTyp;
                          D_MVZ_FrmdPaAntNormal : D_AbtlDrealTyp;
                          D_MVZ_FrmdPaZusErlNorm: D_AbtlDrealTyp;
                          D_MVZ_FrmdPaAntWahl : D_AbtlDrealTyp;
                          D_MVZ_FrmdPaZusErlWahl: D_AbtlDrealTyp;
                          D_MVZ_FrmdPaVersTage : D_AbtlDrealTyp;
                          D_ArztMinM : D_AbtlDrealTyp;

                          {Achtung!   hier wird was reingerechent, entspricht B-Dat aber PerUNabhängig     }
                          D_KPIBasisW : BasisWFld; {die Basiswerte zum Punkte ermitteltn      }
                          D_KPIPunkte : KPIPktFld; {die daraus resultierenden Punkte          }
                          D_SSkPktSum : SSkSumFld; {Hier steht die Summe aller SoftSkillPunkte}
                        END; {of D_DatRecTyp}
Delphi-Quellcode:
{Entscheidungsdaten  ---------------------------------------------------------- }
   EInvAltFldTyp = ARRAY[InvAlternTyp] OF BOOLEAN;
   EInstRecTyp = RECORD
                          InvAlt : EInvAltFldTyp;
                          OutSourc : BOOLEAN;
                          DienstlE : LONGINT;
                          dummy : REAL; {für ev einheiten in real}
                          DienstlP : REAL;
                        END;
   EInstFldTyp = ARRAY[InstTypD] OF EInstRecTyp;
   ENutzRecTyp = RECORD
                          UmwZi : SMALLINT;
                          ErwZi : SMALLINT;
                          BettErl : REAL;
                        END;
   ENutzFldTyp = ARRAY[AbtlTypD,StatTypD] OF ENutzRecTyp;
   EPersRecTyp = RECORD
                          Einst : WORD;
                          Entla : WORD;
                          Train : WORD; {tage}
                          NebKo : REAL;
                        END;
   EPersFldTyp = ARRAY[AbtlTypD,DienstATyp] OF EPersRecTyp; {einstel, entl usw}
   EVersetzung = ARRAY[AbtlTypD,AbtlTypD] OF WORD; {interne versetzung}
   EFinaRecTyp = RECORD
                          KrdKurz : REAL; {eventuell ein ARRAY mit Aufzähltyp}
                          KrdLang : REAL;
                          Dividen : REAL;
                          WpKauf : REAL;
                          dummy : REAL;
                        END;
   EGenFldTyp = ARRAY[GenEntTyp] OF REAL;
   E_Pg3Typ = RECORD
                         PersEntFld: EPersFldTyp;
                         Versetzung: EVersetzung;
                         PNebKoInst: REAL;
                        END;
   E_Pg5Typ = RECORD {A004}
                          EGenFld : EGenFldTyp;
                          CodDienst: BOOLEAN;
                        END;

   E_DatRecTyp = RECORD
                          E_BuildStr: BuildStr; {hier neu seit A006}
                          E_Pg0 : FallVertFldTyp;
                          E_Pg1 : EInstFldTyp;
                          E_Pg2 : ENutzFldTyp;
                          E_Pg3 : E_Pg3Typ;
                          E_Pg4 : EFinaRecTyp;
                          E_Pg5 : E_Pg5Typ; {A004}
                        END; {of E_DatRecTyp}
das Folgende:

Den Typ E_DatRecTyp bekomme ich angezeigt, den Typ D_DatRecTyp aber NICHT.

Emit runtime type information ist true und mir ist nicht klar, wo der Unterschied zu suchen ist???
Die beiden Definitionen stehen in der Unit, in der alles definiert ist, direkt hintereinander.
Und das Ganze ist im Interfaceteil nach "type" zu finden.

Vieleicht hat jemand einen Tip

Charly
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: zu manchen Records gibt es keine Rtti

  Alt 23. Jul 2022, 10:32
Über Compilerdefines (evtl. inc-Dateien versteckt) kann man die Erstellung von RTTI abschalten bzw. auf das absolute Minimum reduzieren.
Und das wirkt dann auf Unit a, aber nicht auf b, wenn der Compiler-Define nicht über das Projekt definiert ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: zu manchen Records gibt es keine Rtti

  Alt 23. Jul 2022, 10:40
Danke für den Tip, aber die 2 erwähnten Deklarationen stehen in der selben Unit ohne was dazwischen hintereinander.
Das kanns dann wohl nicht sein.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: zu manchen Records gibt es keine Rtti

  Alt 25. Jul 2022, 08:16
Kopiere doch den record bei dem es funktioniert. Dann ändere den Schritt für Schritt in Richtung des neuen und prüfe jedes Mal obs noch funktioniert. So kommst du sicherlich der Ursache näher.
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: zu manchen Records gibt es keine Rtti

  Alt 25. Jul 2022, 10:14
Sowas in der Art habe ich jetzt auch begonnen,
aber es muss doch irgendeine Möglichkeit geben, festzustellen/nachzulesen wann der Compiler was macht?
Oder bin ich da zu blauäugig?

Charly
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#6

AW: zu manchen Records gibt es keine Rtti

  Alt 25. Jul 2022, 11:14
Habe mich durch zig Foren und Beitäge gewühlt und festgestellt, daß alle bloß Klassen serialisieren.
Mit Infos zu Records sieht es recht mau aus. Oder ich habe falsch gefragt
Du hast im mORMot Forum die Antwort von Arnaud bekommen:
Zitat:
On FPC and before 2010, you need to set the text definition for each type, because otherwise there is not enough RTTI.
Vermutlich wird dein aktuelles Projekt nicht mit Delphi 10.2 erledigt. Für ältere Versionen der direkte Link zur mORMot Hilfe: Record serialization. Für dich von Interesse ist der Punkt Text-based definition.

Bis bald...
Thomas
  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 23:10 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