![]() |
Record aus Speicherbereich initialisieren
Hi, ich versuche gerade einen Record folgendermaßen zu füllen:
Delphi-Quellcode:
Das geht leider so nicht, wie mach ich das ganze richtig?
type TVec3D = packed record
x,y,z:single; end; procedure Foo; var pPointerAufSpeicherbereich:Pointer; a:TVec3D; begin pPointerAufSpeicherbereich := getRichtigenSpeicherbereich; a := TVec3D(pPointerAufSpeicherbereich); end; |
Re: Record aus Speicherbereich initialisieren
Delphi-Quellcode:
a := PVec3D(pPointerAufSpeicherbereich)^;
// oder a := TVec3D(pPointerAufSpeicherbereich^); |
Re: Record aus Speicherbereich initialisieren
Ah danke, das hilft schonmal :)
Gibt's eine Möglichkeit dann direkt zum nächsten Speicherbereich zu springen der einen TVec3D enthalten könnte? Ich dachte da an sowas:
Delphi-Quellcode:
inc(pPointerAufSpeicherbereich,sizeof(TVec3D));
|
Re: Record aus Speicherbereich initialisieren
Zitat:
|
Re: Record aus Speicherbereich initialisieren
@NG, ich bezweifle, dass man untypisierte pointer so inc'en kann. Zumindest für D7 geht das IMHO nicht.
@TE Was machst du da? Willst du so etwas haben:
Delphi-Quellcode:
type
PVec3D = ^TVec3D; TVec3D = packed record x,y,z:single; end; procedure Foo; var pPointerAufSpeicherbereich:PVec3D; begin pPointerAufSpeicherbereich := getRichtigenSpeicherbereich; for i:=0 to x do begin pPointerAufSpeicherbereich.x:=5; inc(pPointerAufSpeicherbereich); //die Größe weis Delphi durch den typisierten Pointer selber end; end; |
Re: Record aus Speicherbereich initialisieren
@sirius:
Ok dann so:
Delphi-Quellcode:
oder
inc(PByte(pPointerAufSpeicherbereich),sizeof(TVec3D));
Delphi-Quellcode:
inc(PVec3D(pPointerAufSpeicherbereich));
|
Re: Record aus Speicherbereich initialisieren
@Sirius: Ich habe einen Speicherbereich in dem mehrere TVec3D's liegen. Diese möchte ich nacheinander in einen Array einlesen.
@Neutral General: Nicht so voreilig, ich würd's nicht posten wenn ich es nicht probiert hätte ;) Aber die Methode mit dem casten auf PByte gefällt mir, hoffe da passiert auch das richtige ;) |
Re: Record aus Speicherbereich initialisieren
Die Methoden die ich eben gepostet habe funktionieren beide.
Die 2. Ist evtl sogar nochn Tick eleganter (finde ich) weil inc dort automatisch so viele Bytes nach oben wie es nötig ist... z.B.
Delphi-Quellcode:
inc(PRect(P)) // +16
inc(PPoint(P)) // +8 inc(PWord(P)) // +2 |
Re: Record aus Speicherbereich initialisieren
Zitat:
@Neutral General: Nur komisch, warum das so nicht auch bei Records zulässig ist :gruebel: . |
Re: Record aus Speicherbereich initialisieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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