![]() |
Bitte eine Zeile C nach Delphi übersetzen
Hi ihrs
Kann mir jemand helfen???
Code:
Vielen Dank
typedef struct _abc {
DWORD def; DWORD hij[ANY_SIZE]; //Hier hab ich keine Ahnung } abc, *Pabc; |
Re: Bitte eine Zeile C nach Delphi übersetzen
Delphi-Quellcode:
type
_abc = record def : Longword; hij : array [0..ANY_SIZE] of Longword; end; |
Re: Bitte eine Zeile C nach Delphi übersetzen
OK! Danke.
Das hij ist also ein array. Aber: Das ANY_SIZE ist ja nach deiner Lösung eine Konstante (Das ANY_SIZE stammt aus dem Original und wurde nicht von mir eingefügt). Könnte es vielleicht sein, das es so auszusehen hat?
Delphi-Quellcode:
also als dynamisches array?
type
_abc = record def : Longword; hij : array of Longword; end; |
Re: Bitte eine Zeile C nach Delphi übersetzen
ne kann nicht sein,
das ANY_SIZE gibt die grösse an sont hätte da
Code:
gestanden
typedef struct _abc {
DWORD def; DWORD hij[]; } oder typedef struct _abc { DWORD def; DWORD *hij; } |
Re: Bitte eine Zeile C nach Delphi übersetzen
Hab grad in der Headerdatei noch was dazu gefunden:
Code:
Heißt das ANY_SIZE ist = 1 falls es nicht schon vorher definiert wurde???
#ifndef ANY_SIZE
#define ANY_SIZE 1 #endif |
Re: Bitte eine Zeile C nach Delphi übersetzen
japp
|
Re: Bitte eine Zeile C nach Delphi übersetzen
OK! Es geht. Vielen Dank Snoop
|
Re: Bitte eine Zeile C nach Delphi übersetzen
kein problem :)
|
Re: Bitte eine Zeile C nach Delphi übersetzen
Zitat:
|
Re: Bitte eine Zeile C nach Delphi übersetzen
Das ist eine typische C Konstruktion.
Es wird ein Record variabler Laenge beschrieben. Die Deklaration ist nicht fuer eine Variable, sondern dient dazu einen alloziierten Speicherbereich umzutypen, damit man auf das Array zugreifen kann. |
Re: Bitte eine Zeile C nach Delphi übersetzen
Zitat:
|
Re: Bitte eine Zeile C nach Delphi übersetzen
Zitat:
|
Re: Bitte eine Zeile C nach Delphi übersetzen
Es ist ein dynamisches Array nach Microsoft C Art.
Es wird ein Speicherbereich alloziiert und dann der Anfang des Bereiches mit diesem Recordtyp interpretiert. Es wird nun der Laengenwert gesetzt. Danach wird oft eine API-Funktion gerufen, die den Bereich ausfuellt. Manchmal liefert auch eine API-Funktion einen fertig ausgefuellten Bereich ab. Nur der Name ANY_SIZE deutet an das es so eine Konstruktion ist. C erlaubt es das eine Arraydeklaration am Ende eines Records/Structs Null Elemente haben darf, also ein sizeof() von Null. Damit bekommt der Speicherbereich hinter dem Record einen Namen und Typ. |
Re: Bitte eine Zeile C nach Delphi übersetzen
Und wie kann ich das am vernünftigsten nach Delphi umsetzen?
|
Re: Bitte eine Zeile C nach Delphi übersetzen
Das ist die wahrscheinlich korrekteste Version der Deklaration:
Delphi-Quellcode:
DWORD ist in Windows.pas deklariert.
type
Pabc = ^abc; abc = packed record def: DWORD; hij: array [0..ANY_SIZE-1] of DWORD; end; Jetzt kannst du einen geeignet langen Speicherbereich mit GetMem alloziieren und den Pointer zu einem Pabc umtypen. Wenn du dann noch die Rangechecks ausschaltest kannst du die Elemente von hij ansprechen mit hij[I]. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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