![]() |
PDWORD[0] in Delphi (von C(++?))
Hallo,
wie setze folgenden C-Code um?
Code:
bei
...
DWORD *pFirstSectOfFat; ... // First FAT Sector pFirstSectOfFat[0] = 0x0ffffff8; // Reserved cluster 1 media id in low byte pFirstSectOfFat[1] = 0x0fffffff; // Reserved cluster 2 EOC pFirstSectOfFat[2] = 0x0fffffff; // end of cluster chain for root dir ...
Delphi-Quellcode:
mault der Compiler und sagt Array-Typ erforderlich.
...
var pFirstSecFAT : PDWORD; ... pFirstSecFAT^[0] := $0ffffff8; pFirstSecFAT^[1] := $0fffffff; pFirstSecFAT^[2] := $0fffffff; ... Danke für die Mühe:? |
AW: PDWORD[0] in Delphi (von C(++?))
Die Exakte Übersetzung wäre wohl dieses hier:
Delphi-Quellcode:
var
pFirstSecFAT : PDWORD; begin {$POINTERMATH ON} new(pFirstSecFAT); pFirstSecFAT[0] := $0ffffff8; pFirstSecFAT[1] := $0fffffff; pFirstSecFAT[2] := $0fffffff; {$POINTERMATH OFF} |
AW: PDWORD[0] in Delphi (von C(++?))
In älteren Versionen, wo es kein Pointermath gibt, so:
Delphi-Quellcode:
Was mir etwas seltsam vorkommt, ist dass nur für das erste Element Speicher reserviert wird, wenn ich das richtig sehe.
type
PDWORDArray = ^TDWORDArray; TDWORDArray = array [0..0] of DWORD; var pFirstSecFAT : PDWORDArray; begin new(pFirstSecFAT); pFirstSecFAT[0] := $0ffffff8; pFirstSecFAT[1] := $0fffffff; pFirstSecFAT[2] := $0fffffff; |
AW: PDWORD[0] in Delphi (von C(++?))
System.SysUtils.pas(165):
Delphi-Quellcode:
In Anlehnung daran würde ich das Feld mit den Grenzen 0..8191 deklarieren:
{ General arrays }
PByteArray = ^TByteArray; TByteArray = array[0..32767] of Byte; PWordArray = ^TWordArray; TWordArray = array[0..16383] of Word;
Delphi-Quellcode:
type
PDWordArray = ^TDWordArray; TDWordArray = array [0..8191] of DWord; |
AW: PDWORD[0] in Delphi (von C(++?))
Delphi-Quellcode:
ist in Delphi ein Sonderfall.
array[0..0] of
Das entspricht einem "offenen" statischem Array und für die Indizierung wird niemals ein Bereichsprüfungscode implementiert, selbst wenn in den Projectoptionen/Compilerschaltern die entsprechende Funktion aktiviert sein sollte. [edit]
Delphi-Quellcode:
nutzen viele Delphianer als Sonderfall, für ein offenes Array (nur bei Pointern).
array[0..0] of
Es entspricht also quasi eigentlich einem
Delphi-Quellcode:
.
[0..unbegrenzt]
|
AW: PDWORD[0] in Delphi (von C(++?))
Ich habe versucht eine Quelle zu finden. Wo steht, dass das ein Sonderfall ist, und dass für Felder mit den Grenzen 0..0 nie eine Bereichsprüfung durchgeführt wird?
|
AW: PDWORD[0] in Delphi (von C(++?))
Mir isses so, als stand malvor vielen Jahren irgendwo in der OH :gruebel: oder doch nur in irgendeinem Tutorial?
Nja, zumindestens ist es eine sehr einfache Deklaration, denn die andere Variante ist nicht wirklich schön.
Delphi-Quellcode:
type
TMyArray = array[0..(High(NativeInt) - SizeOf(NativeUInt) * 2) div SizeOf(TIrgendwas) - 1] of TIrgendwas; PMyArray = ^TMyArray; TMyArray2 = array[0..IrgendeinWertWoManDenktErKönntePassenUndDerNichtZuGroßIst{bei 32 Bit unter 2 GB, inkl Verwaltungsdaten}] of TIrgendwas; PMyArray2 = ^TMyArray2; |
AW: PDWORD[0] in Delphi (von C(++?))
Danke Leute,
das
Delphi-Quellcode:
hat geholfen. Nun muss nur noch der Rest hinhauen:wink:
{$POINTERMATH ON}
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 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