Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zeiger inkrementieren: 64Bit -> Fehler (https://www.delphipraxis.net/165619-zeiger-inkrementieren-64bit-fehler.html)

Viktorii 9. Jan 2012 13:47

Delphi-Version: XE2

Zeiger inkrementieren: 64Bit -> Fehler
 
Moin.

Ich habe folgenden Code welcher sich als 32 Bit Applikation problemlos kompilieren lässt:

Delphi-Quellcode:
prcedure MyProc(pBuffer: Pointer);
begin
  ...
  ...
  inc(Integer(pBuffer), $8000);
  ...
end;
Wenn ich als 64 Bit kompilieren möchte bekomme ich den Fehler


Wo liegt das Problem?
Zitat:

[DCC Fehler] MyFunctions.pas(169): E2064 Der linken Seite kann nichts zugewiesen werden

Viktorii 9. Jan 2012 13:49

AW: Zeiger inkrementieren: 64Bit -> Fehler
 
Ich glaub ich habe schon die Lösung

Delphi-Quellcode:
pBuffer := PByte(pBuffer) + $8000;
So scheint es zu gehen.

Uwe Raabe 9. Jan 2012 14:03

AW: Zeiger inkrementieren: 64Bit -> Fehler
 
Unter 64-Bit ist ein Zeiger 8 Byte (eben 64 Bit) groß, während ein Integer weiterhin 32 Bit verwendet. Mit dem Cast
Delphi-Quellcode:
Integer(pBuffer)
wird somit eine temporäre Variable mit den unteren 32 Bit des Zeigers angelegt. Dieser kann man natürlich nichts zuweisen - zumindest hätte es nicht den gewünschten Effekt.

Der Cast auf
Delphi-Quellcode:
PByte
ist hier genau die richtige Lösung.

daywalker9 9. Jan 2012 14:04

AW: Zeiger inkrementieren: 64Bit -> Fehler
 
Aus Integer muss NativeInt gemacht werden, da Integer 32 Bit bleibt und der NativeInt je nach Platform sich anpasst.

Edit: Wo war die rote Box?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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