Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PPropInfo dynamsich anlegen (https://www.delphipraxis.net/139366-ppropinfo-dynamsich-anlegen.html)

TheFrog 27. Aug 2009 14:40


PPropInfo dynamsich anlegen
 
Ich brauche in meinem Programm eine dynamsich erzeugte PPropInfo, damit ich RTTI "simulieren" kann.

Ich habe folgenden Versuch gemacht, diese im Speicher anzulegen:

Delphi-Quellcode:
 
  var
    FPropInfo: PPropInfo;

  // PropInfo initialisieren
  GetMem(FPropInfo, SizeOf(TPropInfo));
  GetMem(FPropInfo^.PropType, SizeOf(Integer));
  GetMem(FPropInfo^.PropType^, SizeOf(TTypeKind));
Liege ich damit richtig, irgendwie stehe ich auf dem Schlauch!

Merci, Hans.

Tryer 27. Aug 2009 17:51

Re: PPropInfo dynamsich anlegen
 
Ein einfaches
Delphi-Quellcode:
New(FPropInfo);
sollte reichen.

MfG,
Dirk

Apollonius 27. Aug 2009 18:05

Re: PPropInfo dynamsich anlegen
 
Dadurch werden die anderen Zeiger aber nicht angelegt.

@Ersteller: Das sieht grundsätzlich ganz gut aus, für FPropInfo^.PropType^ brauchst du aber mehr Speicher - hinter dem TTypeKind steht noch eine Längenangabe, der Name des Typs und einige andere Informationen, die abhängig vom TypeKind sind.

TheFrog 27. Aug 2009 20:02

Re: PPropInfo dynamsich anlegen
 
Das mit New(FPropInfo) war auch mein erster Gedanke.

Da aber PropType ein Pointer auf einen Pointer auf einen Record ist, ist die Sachen nicht so einfach.

Ich habe jetzt einfach die Record-Typen, also TPropInfo, usw. in der Klasse angelegt und den Zeiger darauf zeigen lassen.

Delphi-Quellcode:
var
  FPropInfoRecord: TPropInfo;
  FTypeKindPointer: PTypeInfo;
  FTypeKindRecord: TTypeInfo;

  FPropInfo := @FPropInfoRecord;
  FPropInfo^.PropType := @FTypeKindPointer;
  FTypeKindPointer := @FTypeKindRecord;
Nicht sehr elegant, aber es hat funktioniert und das auch noch ohne Speicherloch!

Danke allen, Hans.

generic 27. Aug 2009 21:38

Re: PPropInfo dynamsich anlegen
 
Schnapp dir D2010 - da brauchst du den Humbug nicht mehr machen. Die neue RTTI ist Klasse.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 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