Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Cardinal in Pointer speichern/konvertieren (https://www.delphipraxis.net/141017-cardinal-pointer-speichern-konvertieren.html)

ThE_-_BliZZarD 30. Sep 2009 17:26


Cardinal in Pointer speichern/konvertieren
 
Moin moin,

lang ists her, nun brauche ich mal wieder etwas Hilfe.

Bevor ich mein Problem erläutere eine kurze Bemerkung:

Auch wenn es unsauber ist, ich würde es gerne so machen. Danke :)

Also:

Definiert habe ich einen Pointer, SizeOf() gibt 4 zurück.

Delphi-Quellcode:
PPointer = ^TMyRecord;
Jetzt würde ich gerne eine Zahl vom Typ Cardinal darin speichern (denn auch die hat ja bekanntermaßen ein SizeOf() von 4). Wie kann ich Delphi dazu bewegen, in den Speicherbereich des Pointers einfach meine Cardinal-Zahl zu schreiben? Sowas wie in C++ mit static_cast<> habe ich nicht gefunden :(

Delphi-Quellcode:
myNumber: Cardinal;
myTargetP: PPointer;

myTargetP := myNumber; // Wie? :D

Vielen Dank für jede Hilfe :)

DeddyH 30. Sep 2009 17:29

Re: Cardinal in Pointer speichern/konvertieren
 
Delphi-Quellcode:
myTargetP := PPointer(myNumber);
[edit] Das war ein P zuwenig [/edit]

ThE_-_BliZZarD 30. Sep 2009 17:43

Re: Cardinal in Pointer speichern/konvertieren
 
Stimmt, da war mal was :D

Vielen Dank schon mal, aber noch eine weitere Frage:

Delphi-Quellcode:
PPointer = ^TMyRecord;

varP: PPointer;

varP := PPointer( functionThatReturnsCardinal( ) );
Das funktioniert nicht, der Fehler ist (natürlich):
Zitat:

DCC Fehler: TreeFunctions.pas(260): E2010 Inkompatible Typen: 'PNodeItem' und 'PPointer'

DeddyH 30. Sep 2009 17:48

Re: Cardinal in Pointer speichern/konvertieren
 
Mir scheint, Du hast da 2 verschiedene typisierte Pointer. Eine Möglichkeit wäre so etwas:
Delphi-Quellcode:
varP := PPointer(Cardinal(functionThatReturnsCardinal()));
Ungetestet (erscheint mir eh nicht ganz ungefährlich, aber Du wirst schon wissen, was Du tust).

NickelM 30. Sep 2009 17:58

Re: Cardinal in Pointer speichern/konvertieren
 
Gehts nicht einfach so????????
Delphi-Quellcode:
var P: PNodeItem;
   Zahl : Cardinal;

P := ThatReturnsCardinal();
Zahl := Cardinal(P^);
Wenn net schau mal in P^ nach, was es dort für eigenschaften gibt, bzw. wie du an die Zahl kommst

ThE_-_BliZZarD 30. Sep 2009 18:22

Re: Cardinal in Pointer speichern/konvertieren
 
Okay, ich habs hinbekommen, aber nicht ganz so.

Delphi legt autoamtisch "Funktionen" für jeden Typ an, um in diesen zu casten.

So funktioniert es wie folgt:

Delphi-Quellcode:

targetP: PNodeItem;
myNumber: Cardinal;

targetP := PNodeItem( functionThatReturnsCardinal() );

// und um den Wert wieder auszulesen:
myNumber := Cardinal(targetP);
Vielen Dank für die vielen Anregungen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz