![]() |
Re: Record: Delphi only?
Moin Zusammen,
also, solange es keinen zwingenden Grund gibt die Daten zu packen, sollten sie ungepackt bleiben. Wird so ein Record allerdings benutzt, um, z.B., Daten aus einer Datei einzulesen, wird man um das Packen wohl nicht herumkommen (obwohl ich auch schon Dateien mit Füllbytes gesehen habe ;-)) |
Re: Record: Delphi only?
@Oxmyx: OK, wuste ich och noch nicht ._.
@Hasilein: Na ja, ich definiere zwar schon 'ne ganze Weile meine Records als Packed, versehe sie aber abundzu auch selber mal mit entsprechenden FüllBytes ... so hab ich wenigstens die Ausrichtung selber im Griff und der Typ ist, egal wie ausgerichtet wird, immer i.O. |
Re: Record: Delphi only?
hmm ich kann ja dazu sagen des man einen packed record braucht aber was ist besser?
Es sollte auch ein ziemlicher anfänger so eine DLL schreiben können ohne des er sich viel mit den Records auskennen sollte. packed oder not packed? |
Re: Record: Delphi only?
Na ja, wenn du nur mit Delphi auf deine Records zugreifst und überall die Standardeinstellungen läßt ( {$A... }, dann kannst du ganz einfach bei ungepackt bleiben.
Ansonsten kannst du alles packen, oder mußt halt aufpassen, daß du mit der selben ausrichtung arbeitest ... es ist also dir überlassen, was du willst/magst ^^ |
Re: Record: Delphi only?
ja aber ich will ja nicht des es nur über Delphi ansteuerbar ist sondern auch bei "allen" anderen Programmiersprachen.
Gibt es in den sprachen c++, vb, c#, ... überrall packed und not packed? |
Re: Record: Delphi only?
in C++ gibt es das auf jeden fall (wurde ja bereits geschrieben das es da mit "pragma" geht). Ansonsten sollte es in allen Programmiersprachen "packed" geben.
Und wenn du ohne "packed" arbeitest sollte das auch für Programmiersprachen kein Problem sein die es nicht beherrschen weil man dann dort einfach den Record anders definiert. Sieht der Record bei dir also so aus
Delphi-Quellcode:
könnte man das sinngemäß in anderen Programmiersprachen die so definieren
TMyRecord = record
part1: Byte;//danach werden z.B. 3 Bytes aufgefülllt part2: Integer; end;
Delphi-Quellcode:
wenn du also nicht "packed" verwendest sollte es nirgends zu problemen kommen, es muss nur anders definiert werden.
TMyRecord = packed record
part1: Byte; partx: Array[0..2] of Byte; part2: Integer; end; |
Re: Record: Delphi only?
Also packed ist es auf jeden Fall überall
und selbst wenn es not packed nicht geben sollte, so könnte man die nötigen FüllBytes auch selber einfügen. Wie gesagt, inzwischen mach ich es nur noch mit packed, dann ist zwar im QuellCode mehr drin, aber es funktioniert immer und überall :angel:
Delphi-Quellcode:
x = packed Record
B: Byte; _fill: Triple; i: Integer; End; Triple is'n eigener 3-Byte-Type. Es sieht halt besser aus, als
Delphi-Quellcode:
x = packed Record
B: Byte; _fill: packed Array[0..2] of Byte; i: Integer; End; // oder x = packed Record B: Byte; _fill1: Byte; _fill2: Word; i: Integer; End; |
Re: Record: Delphi only?
ok danke leute für die Infos :thumb:
Ich glaub ich werd packed records verwenden |
Re: Record: Delphi only?
Hi Leute
Ich bins mal wieder. Hab noch ne Frage. Wegen den eigenheiten von Delphi. Das eine String variable delphi eigen ist klar aber was gibt es sonst noch was andere Programmiersprachen anderes im Speicher verwalten. Also kann ich z.b. Boolean, Cardinal, ... ohne weiteres verwenden oder bei was muss ich aufpassen. |
Re: Record: Delphi only?
Zu dem Packed:
Weniger wichtig als die tatsächliche Ausrichtung der Daten ist die Tatsache, dass die Ausrichtung bekannt ist. WEnn du z.B. weißt, dass dein Compiler immer an 64-bit-Grenzen ausrichtet, kannst du das eventuellen Benutzern deines Codes sagen und sie können die Daten danach ausrichten. In C# ist es beispielsweise im Normalfall überhaupt nicht festgelegt, wie die Daten genau ausgerichtet werden, aber man kann entweder das Packing oder das exakte Layout der Elemente spezifizieren. Zitat:
In C gibt es beispielsweise keinen bool-Typ. Und ob ein bool-Typ in C++ oder C# identisch ist oder mit dem Delphi-Typ identisch, sei dahingestellt. Bei Typen wie Cardinal solltest du dich vielleicht an den Win32-Typen orientieren, da ein typischer C- oder C++-Programmierer Cardinal überhaupt nicht kennt (würde auf Anhieb auf DWORD tippen?). Generell müssten die meisten Sprachen, die unter Windows verwendet werden, auch die Standard-Windows-API-Typen implementieren. Da gibt es auch einen BOOL-Typ, der wird glaub ich nach int übersetzt. Und irgendwie sagt mir dazu der Name LongBool etwas, das war vielleicht die Delphi-Entsprechung :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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