Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer operation (https://www.delphipraxis.net/130740-pointer-operation.html)

oli_a 12. Mär 2009 12:45


Pointer operation
 
Hallo,

ich arbeite von Delphi heraus mit einer Dll. Teil der Kommunikation ist das Increment eines Pointers.
Der Pointer war bisher vom Typ PByte.
Nun nutze ich einen Pointer vom Typ PWord.

Als Folge dessen, funktioniert der Befehl Inc(pData) nicht mehr. Liefert mir nun den Fehler
"Invalid Pointer Operation".

Wie bekomm ich den PWord-Pointer hochgezählt?

lbccaleb 12. Mär 2009 12:48

Re: Pointer operation
 
Upps, hab was überlesen :cry:

himitsu 12. Mär 2009 12:59

Re: Pointer operation
 
Pointeroperationen gehen nicht immer mit allen Pointern-Typen


eventuell:
Delphi-Quellcode:
var x: PWord;

Inc(PWideChar(x)); // zählt 2 dazu, also +SizeOf(x)

Inc(PByte(x));     // zählt nur 1 Byte
Inc(Integer(x));   // zählt nur 1 Byte
Inc(PByte(x), 2);  // zählt auch SizeOf(x) dazu

oli_a 12. Mär 2009 13:47

Re: Pointer operation
 
Also es kommt schonmal keine Fehlermeldung mehr.
Die Hardware reagiert trotzdem nicht richtig.
Ohne Fehlermeldung wird's jetzt schwierig den Fehler zu finden. :(

sirius 12. Mär 2009 13:56

Re: Pointer operation
 
Schon dein Befehl oben sollte funktionieren. Was willst du eigentlich?

oli_a 12. Mär 2009 14:04

Re: Pointer operation
 
Na das Increment eines PWord-Pointers.

x000x 12. Mär 2009 14:04

Re: Pointer operation
 
Also bei mir (Delphi 5) funktioniert Inc(pdata) definitiv (pData = PWord)...

Ich vermute mal eher, dass du beim erhöhen des Pointers in einen "undefinierten" Speicherbereich reinrutscht.

oli_a 12. Mär 2009 14:14

Re: Pointer operation
 
Wie kann sowas passieren?

Delphi-Quellcode:
         
for i := 0 to DatLen-1 do
   begin
      if a = 0 then a := 65535 else a := 0;
         pData^ := a;
         Inc(pData);
   end;
Das ganze soll bewirken, dass an meiner Hardware (16-Bit-Port) ständig EInsen und Nullen im Wechsel ausgegeben werden.
Mit der 8 Bit Variante funktioniert das wunderbar. Das einzige, was sich ändert ist, dass pData ein PWord-Pointer ist und kein PByte mehr.

sirius 12. Mär 2009 14:15

Re: Pointer operation
 
Hast du auch doppelt so viel Speicher reserviert?

oli_a 12. Mär 2009 14:29

Re: Pointer operation
 
Ich rufe die Funktion aus einer DLL (auf welche ich keinen Einluß habe) auf. Der Pointer wird nicht durch mich deklariert.
Na ich denk, ich werd's einfach mit den 8-Bit lösen.

Danke für die Antworten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 Uhr.
Seite 1 von 2  1 2      

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