AGB  ·  Datenschutz  ·  Impressum  







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

Variant Typ erweitern möglich?

Ein Thema von Zacherl · begonnen am 4. Mai 2011 · letzter Beitrag vom 4. Mai 2011
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

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

Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 08:53
Delphi-Version: 2010
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.

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?
Werden die Typen der Variants vom Compiler schon hardkodiert?
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:
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);
..
Kennt sich jemand mit TCustomVariantType aus oder hat ein einfaches Beispiel zur Verwendung? Habe nicht wirklich viel Brauchbares dazu im Netz gefunden.

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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 4. Mai 2011 um 09:14 Uhr)
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 09:56
Hallo Zacherl,

ich habe leider keine Erfahrung im Umgang mit Variant-Typen, allerdings bin ich vor einiger Zeit mal über das Video von Alister Christie gestolpert.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 10:45
Ich weiß nicht, ob's für dich relevant ist, aber das hört sich an, als würdest du array of Variant verwenden. Format verwendet aber array of const , was intern ein array of TVarRec ist - siehe hier.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 10:54
Das Einfachtes, um einen eigenen Variant-Typ zu erstellen, ist vermutlich,
wenn du über Delphi-Referenz durchsuchenTCustomVariantType gehst.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 12:57
Ich hab sowas mal in meinem Blog beschrieben - dort allerdings bezogen auf TInvokeableCustomVariant.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 13:30
Danke euch allen. Ich hab mal wieder keine Augen im Kopf gehabt

das hört sich an, als würdest du array of Variant verwenden. Format verwendet aber array of const
Dein Beitrag hat mir die Augen geöffnet. Eigentlich habe ich nämlich sogar array of const verwendet. Dort wird leider nicht zwischen Byte, Word, etc. differenziert. Jetzt habe ich das ganze mal in ein array of Variant geändert und siehe da, wie durch Magie wählt Delphi automatisch den korrekten Typ.

Der Aufruf mit:
Test([1, Word(1), Byte(1), DWord(1)]) generiert beispielsweise die Typen BYTE, WORD, BYTE, DWORD, also genau das was ich wollte. Da muss ich nichtmal was erweitern.

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 14:04
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 array of const und nach innen ein implizites array of TVarRec ).
(wobei Variant ja auch nicht alles kennt)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 14:11
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Variant Typ erweitern möglich?

  Alt 4. Mai 2011, 14:16
Hallo,

Hier gibts ein Video-Tutorial wos ganz gut beschrieben wird:

http://www.youtube.com/watch?v=pzvI6yad3iY

Edit: Oh nicht genug gelesen glaube ich...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  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 03:59 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