![]() |
Delphi-Version: 2010
Variant Typ erweitern möglich?
Guten Morgen,
ich habe mir eine Funktion geschrieben, welche mehrere Parameter ähnlich wie in der Format() Funktion über ein variantes Array übergeben bekommt. Hierbei unterscheidet der Standard Variant Typ ja zwischen WideString, AnsiString, Integer, Boolean, und so weiter. Übergebe ich allerdings ein Byte oder ein DWord oder einen Integer, so ist der Typ des Variants immer vtInteger. :arrow: Jetzt frage ich mich, ob es möglich ist, den Variant Typ so zu erweitern (bzw. besser gleich zu ersetzen), dass zwischen den verschiedenen Ganzzahltypen unterschieden wird? :arrow: Werden die Typen der Variants vom Compiler schon hardkodiert? :arrow: Fals nicht wäre eine Unterscheidung von beispielsweise Byte oder Word ja gar nicht möglich oder? Fragen über Fragen, ich hoffe mir kann da jemand weiterhelfen. Edit: Grade die Definition des Typs TVarType gefunden. Das sieht schonmal vielversprechend aus:
Delphi-Quellcode:
:arrow: Kennt sich jemand mit TCustomVariantType aus oder hat ein einfaches Beispiel zur Verwendung? Habe nicht wirklich viel Brauchbares dazu im Netz gefunden.
varSmallInt: (VSmallInt:
varInteger: (VInteger: varSingle: (VSingle: Single); varDouble: (VDouble: Double); .. varShortInt: (VShortInt: ShortInt); varByte: (VByte: Byte); varWord: (VWord: Word); varLongWord: (VLongWord: LongWord); varInt64: (VInt64: Int64); varUInt64: (VUInt64: UInt64); .. Mir geht es eigentlich nur darum, dass ich mehrere variante Typen unkompliziert und vor allem "in einem Rutsch" an meine Funktion übergeben kann. Die Funktion konvertiert die Daten für ein Netzwerkprotokoll. Dieses erwartet pro Parameter ein Byte zur Kennzeichung des Typs, weshalb es für mich wichtig wäre da eine genaue Unterscheidung treffen zu können. Viele Grüße Zacherl |
AW: Variant Typ erweitern möglich?
Hallo Zacherl,
ich habe leider keine Erfahrung im Umgang mit Variant-Typen, allerdings bin ich vor einiger Zeit mal über das ![]() Gruß Hawkeye |
AW: Variant Typ erweitern möglich?
Ich weiß nicht, ob's für dich relevant ist, aber das hört sich an, als würdest du
Delphi-Quellcode:
verwenden. Format verwendet aber
array of Variant
Delphi-Quellcode:
, was intern ein
array of const
Delphi-Quellcode:
ist - siehe
array of TVarRec
![]() |
AW: Variant Typ erweitern möglich?
Das Einfachtes, um einen eigenen Variant-Typ zu erstellen, ist vermutlich,
wenn du über ![]() |
AW: Variant Typ erweitern möglich?
Ich hab sowas mal in meinem
![]() |
AW: Variant Typ erweitern möglich?
Danke euch allen. Ich hab mal wieder keine Augen im Kopf gehabt :wall:
Zitat:
Delphi-Quellcode:
verwendet. Dort wird leider nicht zwischen Byte, Word, etc. differenziert. Jetzt habe ich das ganze mal in ein
array of const
Delphi-Quellcode:
geändert und siehe da, wie durch Magie wählt Delphi automatisch den korrekten Typ.
array of Variant
Der Aufruf mit:
Delphi-Quellcode:
generiert beispielsweise die Typen BYTE, WORD, BYTE, DWORD, also genau das was ich wollte. Da muss ich nichtmal was erweitern.
Test([1, Word(1), Byte(1), DWord(1)])
Viele Grüße Zacherl |
AW: Variant Typ erweitern möglich?
Das Problem bei diesem "const" ist, daß es weniger Typen kennt, als Variant.
Siehe TVarRec, welches der eigentliche Typ von diesen "const" ist (nach außen
Delphi-Quellcode:
und nach innen ein implizites
array of const
Delphi-Quellcode:
).
array of TVarRec
(wobei Variant ja auch nicht alles kennt) |
AW: Variant Typ erweitern möglich?
Jap genau, ich hatte irgendwie einen Denkfehler drinnen und dachte, dass dieser TVarRec Record, den ich verwendet habe gleichzusetzen mit Variant ist. Ich poste den Encoder/Decoder gleich mal in einem neuen Thread. Bin mir nicht sicher, ob ich da noch irgendwas performanter gestalten könnte.
Die Typen die Variant unterstüzt reichen mir voll und ganz aus. |
AW: Variant Typ erweitern möglich?
Hallo,
Hier gibts ein Video-Tutorial wos ganz gut beschrieben wird: ![]() Edit: Oh nicht genug gelesen glaube ich... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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