![]() |
"Datentyp" record end wer kennt ihn?
Also ich kenne den Datentyp seit jetzt... vermutlich...
Delphi-Quellcode:
Mann kann damit zumindest in dem code den ich mir auf github(
PServerHeader = ^TServerHeader;
TServerHeader= packed record Server:TAdresse; Port:Integer AlternativerServer: Record end; end; ![]() Der Code sieht insgesamt so aus als wäre er Ergebnis eines C zu Pascal Transpilers. Wer von euch kannte "Record End" schon vorher oder hat es fürher mal benutzt? Oder nutzt es heute noch? gibt es eine bessere oder eben schönere Lösung? |
AW: "Datentyp" record end wer kennt ihn?
Zitat:
Delphi-Quellcode:
TVirtualNode = packed record
... private Data: record end; // this is a placeholder, each node gets extra data determined by NodeDataSize public |
AW: "Datentyp" record end wer kennt ihn?
Nun ja... Diese Syntax ist in Standard Pascal schon immer möglich gewesen. Es ist halt ein record und der Inhalt ist leer.
![]() |
AW: "Datentyp" record end wer kennt ihn?
Jupp, das ist ein NULL Byte große Typ.
In C++ wird stattdessen gern ein VOID oder ein array[0] verwendet, was aber im Delphi nicht geht, da dort das Kleinste ein array[0..0] ist, welches 1 statt 0 Items enthält. Beachte: VOID, nicht VOID*, weil das wäre ein "Pointer". |
AW: "Datentyp" record end wer kennt ihn?
Zitat:
Ich nehme an das ganze funtkioniert nicht mit Managed Records oder? Zitat:
Ich meine mir war klar das es irgendwie alt ist, aber habe das vorher nie gesehen . Und ich habe in der Schule noch Pascal im Informatik Untericht gelernt!!! Also ich bin alt. Zitat:
|
AW: "Datentyp" record end wer kennt ihn?
Zitat:
|
AW: "Datentyp" record end wer kennt ihn?
Zitat:
Also dieser "leer record" selbst hat nichts mit Managed zu tun, bzw. auch einen Managed Record kannst du ohne "Fields" deklarieren. Und was den VST betrifft, wenn/da er auch normale Managed Types (String, DynArray, Variant oder Interface) beherschen sollte, wäre da prinzipiell auch ein Managed Record mit abgedeckt.
Delphi-Quellcode:
Aber drin mußt du dann selbst casten, da es innen nur die Referenz gibt, aber leider keine TypeInfo.
prodedure Test(var Irgendwas);
prodedure Test(const Irgendwas); Da muß man dann schon auf Generics übergehn, so ala
Delphi-Quellcode:
.
prodedure Test<T>(Irgendwas: T);
|
AW: "Datentyp" record end wer kennt ihn?
Delphi-Quellcode:
var
Data1: record end; Data2: record i: Integer; end;
Delphi-Quellcode:
Das ist ein Nested-Type, also ein Typ, der inline (nicht explizit) deklariert wird,
type
TRecordA = record i: Integer; end; TRecordB = record x: Integer; y: TRecordA; end; TRecordC = record x: Integer; y: record; i: Integer; end; end; aber teilweise fehlen ihm einige TypeInfos, womit generische Zugriffe darauf schwer bis garnicht möglich sind. |
AW: "Datentyp" record end wer kennt ihn?
Ich nehme an "Record end;" funktioniert nur in Records?
Weil in FMX haben wir ja sehr nützliche
Delphi-Quellcode:
Aber sowas wie
TagObject:TObject;
TagString:String; Tag:NativeInt;
Delphi-Quellcode:
Ginge vermutlich nicht?
TagRecord:Record end;
So ein Typ für irgendeinen gemanagden Record. Edit: !!!heilige Scheiße!!! Ich habe jetzt erst verstanden dass "record end;" kein einfacher Typ ist sondern ein leerer inline deklarierter Record... Sorry , dass ich mich so dumm angestellt habe...danke das ihr am Ball geblieben seid und mir das weiter erklärt habt. |
AW: "Datentyp" record end wer kennt ihn?
Jupp, im Prinzip ist das
Delphi-Quellcode:
sowas
var
TagRecord: record end;
Delphi-Quellcode:
type
VOID = record end; var TagRecord: VOID; |
AW: "Datentyp" record end wer kennt ihn?
Zitat:
Delphi-Quellcode:
Oder wer's lieber generisch mag (bin gar nicht sicher, ob das wirklich nur für Klassen gilt :gruebel:):
function TVirtualNode.GetData(): Pointer;
// Returns the associated data converted to the class given in the generic part of the function. begin Result := @Self.Data; Include(States, vsOnFreeNodeCallRequired); end;
Delphi-Quellcode:
function TVirtualNode.GetData<T>: T;
// Returns the associated data converted to the class given in the generic part of the function. begin Result := T(Pointer((PByte(@(Self.Data))))^); Include(States, vsOnFreeNodeCallRequired); end; |
AW: "Datentyp" record end wer kennt ihn?
Es gibt in einigen API/Records oftmals Daten hinter dem Record, z.B. im Record nur NameLen und dann "eigentlich" hinter dem Record stehen die Chars des Namen.
Um im Speicher einen Zeiger auf den Namen zu haben, verwenden Viele gern sowas, aber auch
Delphi-Quellcode:
, was sich so aber nicht nach Delphi konvertieren lässt, da char[0] "keine Chars" bedeutet, aber ein
char[0] name
Delphi-Quellcode:
halt "1 Char" ergibt, womit der Record in Delphi eine falsche Größe besitzt.
name: array[0..0] of AnsiChar
|
AW: "Datentyp" record end wer kennt ihn?
Ich nutze das manchmal als leeren Typen für Typparameter generischer Typen, wenn der Typparameter egal ist. Angenommen du hast so einen Typen:
Delphi-Quellcode:
Und du deklarierst einen leeren Typen
TMyGen<T> = class
const Value = 5.56; end;
Delphi-Quellcode:
irgendwo:
TNil
Delphi-Quellcode:
Und du willst jetzt nicht unbedingt irgendeinen spezifischen Typparameter für
TNil = record
end;
Delphi-Quellcode:
festlegen, dann kannst du mit einem "leeren" typen so auf
TMyGen<T>
Delphi-Quellcode:
zugleifen:
Value
Delphi-Quellcode:
Ich finde, so einen void-typen mit der Größe 0 (
TMyGen<TNil>.Value
Delphi-Quellcode:
ergibt ja
SizeOf(TNil)
Delphi-Quellcode:
) sollte es standardmäßig in SysUtils oder so geben.
0
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 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 by Thomas Breitkreuz