![]() |
Diese C-Struktur in Delphi?
Moin,
wie krieg ich den C-Code hier:
Code:
in Delphi umgewandelt?
typedef struct st_used_mem {
struct st_used_mem *next; unsigned int left; unsigned int size; } USED_MEM; Ich habe es so versucht:
Delphi-Quellcode:
type
pst_used_mem = ^st_used_mem; st_used_mem = record next: pst_used_mem; left: Cardinal; size: Cardinal; end; var USED_MEM: pst_used_mem; ist das richtig so? |
Re: Diese C-Struktur in Delphi?
Frage: Warum verwendest Du nicht Integer? Außerdem die Zeile
Delphi-Quellcode:
muß glaube ich weiter nach hinten (vor die var Zeile)
pst_used_mem = ^st_used_mem;
|
Re: Diese C-Struktur in Delphi?
Moin Itiefland,
Zu ersterem: Weil ein unsigned int einem Cardinal entspricht. Zu zweiterem: Ne, ist ja keine Variable, sondern ein Typ. MfG ;) |
Re: Diese C-Struktur in Delphi?
Moin Pseudemys Nelsoni,
also wenn mich meine C(++) Kenntnisse nicht ganz trügen müsste es so aussehen:
Delphi-Quellcode:
wobei Deine Variante mit dem st_used_mem und pst_used_mem auch richtig wären, aber unüblich sind, da der Tagname (hier st_used_mem) bei einer Typdeklaration optional ist.
type
PUSED_MEM = ^USED_MEM; USED_MEM = packed record next: PUSED_MEM; left: Cardinal; size: Cardinal; end; Hiesse es nur struct ...., ohne typedef, wäre USED_MEM eine Variable des Typs der Struktur, da aber das typedef davor steht, ist es ein Alias für den Typ der mit struct deklariert wird. Obwohl es typedef heisst, kann man hiermit keine neuen Typen deklarieren, sondern nur Namen für bestehende vergeben. |
Re: Diese C-Struktur in Delphi?
Moin Christian,
danke für deine Antwort. Habe noch einige Fragen ;) 1. Wieso ist dein Rekord gepackt? 2. Zitat:
3. Zitat:
|
Re: Diese C-Struktur in Delphi?
Moin Pseudemys Nelsoni,
ich habe packed verwendet, damit der Record auf keinen Fall Lücken im Speicher hat. Unter Umständen könnten durch Alignment Lücken entstehen, wenn der Compiler Füllbytes in den Record "einstreut", damit auch alle Felder auf einer bestimmten Grenze liegen. Das ist aber nicht immer sinnvoll, z.B., wenn man den Record an eine Funktion übergibt, die nichts von den Lücken weiss, und dann, eventuell, Daten in die Füllbytes schreibt. Zitat:
Es wird dort, zumindest gemäss C-Konventionen, kein Typ deklariert. Das man daraus in Delphi eine Typdeklaration macht ist dann wieder eine andere Sache. Wenn ich das richtig interpretiere wird, in diesem konkreten Beispiel, der Typ st_used_mem deklariert, was allerdings nicht am typedef, sondern am struct liegt, sowie ein Alias für diesen Typ. ... :gruebel: .... Also wenn ich mal genau darüber nachdenke, müsste man es in Delphi sogar so deklarieren:
Delphi-Quellcode:
Denn durch struct st_used_mem ist der Typ st_used_mem ja auch deklariert worden.
// wegen struct mit Tagname
type Pst_used_mem = ^st_used_mem; st_used_mem = packed record next: Pst_used_mem; left: Cardinal; size: Cardinal; end; // wegen typedef USED_MEM = st_used_mem; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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