Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Pointer zu Word (https://www.delphipraxis.net/203929-pointer-zu-word.html)

Benmik 7. Apr 2020 20:29

Pointer zu Word
 
Ich habe hier ein Problem, das ich nicht verstehe. Ich habe hier einen untypisierten Pointer, von dem ich weiß, dass er auf eine Adresse zeigt, ab der ein UInt16 gespeichert ist. Ich weiß auch, dass ich dort einen Wert zwischen 0 und 8 zu erwarten habe. Bei zwei Testdateien ist Endian einmal Intel und einmal Motorola.

Mir gelingt es aber nicht, im Debugger den korrekten Wert zu ermitteln. UInt16(Ptr) ergibt bei jedem Durchlauf andere, beliebige Werte. PAnsiChar(ptr) ergibt bei zwei Dateien die quasi richtigen Werte #1 oder #6; aber bei anderen Variablen mit gleichem Datentyp, die typischerweise vierstellige Werte haben, völligen Blödsinn.

Wie macht man's richtig?

DeddyH 7. Apr 2020 20:35

AW: Pointer zu Word
 
Müsste es nicht Uint16(Ptr^) heißen? Du willst ja nicht den Zeiger selbst, sondern die Daten, auf die er zeigt.

p80286 7. Apr 2020 20:36

AW: Pointer zu Word
 
Das ist jetzt ein wenig wirr.
Zeig doch mal den Sourcecode.

Gruß
K-H

Redeemer 7. Apr 2020 20:48

AW: Pointer zu Word
 
Zitat:

Zitat von DeddyH (Beitrag 1461555)
Müsste es nicht Uint16(Ptr^) heißen? Du willst ja nicht den Zeiger selbst, sondern die Daten, auf die er zeigt.

Ich bin für PWord(Ptr)^.

Benmik 7. Apr 2020 20:57

AW: Pointer zu Word
 
Zitat:

Zitat von DeddyH (Beitrag 1461555)
Müsste es nicht Uint16(Ptr^) heißen?

Ja verdammich, ganz genauso ist es. Ich bin im Laufe meiner vielen Versuche auch selbst auf die Idee gekommen, weiß der Geier, warum ich das dann nicht weiter verfolgt bzw. gemerkt habe. Danke!

@K-H: Es handelt sich um einen Aufruf der FreeImage-DLL, mit der die EXIF-Daten von JPG eingelesen werden.
Die Funktion heißt
Delphi-Quellcode:
function FreeImage_GetTagValue(tag: PFITAG): Pointer; stdcall; external FIDLL {$IFDEF WIN32}name '_FreeImage_GetTagValue@4'{$ENDIF};
;
PFITAG ist definiert als
Delphi-Quellcode:
  // Handle to a metadata tag
  FITAG = record
    data: Pointer;
  end;
  PFITAG = ^FITAG;
Der Werttyp ist
Delphi-Quellcode:
FIDT_SHORT    = FREE_IMAGE_MDTYPE(3); // 16-bit unsigned integer

PS:
Delphi-Quellcode:
PWord(Ptr)^
geht auch.


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