Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wie erkennen ob Pointer ein Object, String, Array oder Record ist (https://www.delphipraxis.net/208884-wie-erkennen-ob-pointer-ein-object-string-array-oder-record-ist.html)

backdraft 24. Sep 2021 21:59

Delphi-Version: 10.4 Sydney

Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Hallo,

weiss jemand zufällig, ob es eine Möglichkeit gibt zu erkennen, ob ein Pointer auf ein Object, einen String, ein Array oder einen Record zeigt?
Ich nutze die aktuelle Delphi Version 11.

Danke
Oliver

jaenicke 24. Sep 2021 23:00

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Nein, das ist nicht möglich, denn ein Pointer ist ja nur eine Variable mit einer Speicheradresse.

Was möchtest du denn erreichen?

himitsu 25. Sep 2021 08:09

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Objekt, String und dynamisches Array kann man "versuchen" über eine Heuristik zu erkennen,
aber mit False-Positive sollte man da rechnen, falls irgendwas dem Erkennungsmuster entspricht.

Blup 27. Sep 2021 08:57

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Für solche Fälle gibt es den Typ Variant.

uligerhardt 27. Sep 2021 09:27

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Zitat:

Zitat von Blup (Beitrag 1495426)
Für solche Fälle gibt es den Typ Variant.

Oder man pflegt selber ein Flag (normalerweise ein Enum), auf was der Pointer aktuell zeigt.

himitsu 27. Sep 2021 13:50

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Zitat:

Zitat von uligerhardt (Beitrag 1495427)
Oder man pflegt selber ein Flag (normalerweise ein Enum), auf was der Pointer aktuell zeigt.

Dann ist es am Ende aber auch immer ein Zeiger auf einen Record,
oder man speichert den Flag (Enum) neben dem Pointer, als Eigenschaft was dann im Pointer drin ist.

Weil wo im String oder sonstirgendeinem "Pointer" legst sonst deinen Flag/ENUM ab?

uligerhardt 27. Sep 2021 18:28

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
Zitat:

Zitat von himitsu (Beitrag 1495445)
Zitat:

Zitat von uligerhardt (Beitrag 1495427)
Oder man pflegt selber ein Flag (normalerweise ein Enum), auf was der Pointer aktuell zeigt.

Dann ist es am Ende aber auch immer ein Zeiger auf einen Record,
oder man speichert den Flag (Enum) neben dem Pointer, als Eigenschaft was dann im Pointer drin ist.

Weil wo im String oder sonstirgendeinem "Pointer" legst sonst deinen Flag/ENUM ab?

Ja, klar - ich meinte in geeigneter Form daneben. Das wäre halt weniger "schwergewichtig" als z.B. ein Variant und u.U. auch typsicherer, weil man den Enum-Typ maßschneidern kann. Konkret hängt es natürlich von dem Umständen ab.

himitsu 27. Sep 2021 18:49

AW: Wie erkennen ob Pointer ein Object, String, Array oder Record ist
 
TValue (System.RTTI)

Oder TVarRec (array of const), aber das kann auch keine Records,
denn bei einem Record oder einem typitiserten Pointer, da müsste man zusätzlich auch noch die TTypeInfo mit speichern.
Ebenfalls bei statischen Arrays, wobei dynamische Arays und LongStrings (AnsiString, UnicodeString und Ableitungen) ihre TypeInfo, bzw. CharSize+CodePage in sich tragen.


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