Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Adresse eines pointers auslesen (https://www.delphipraxis.net/66156-adresse-eines-pointers-auslesen.html)

ximo 25. Mär 2006 19:18


Adresse eines pointers auslesen
 
Hallo, ich möchte die Adresse eines pointers auslesen, um diese dann einem anderen zuzuweisen.

das Problem ist, ich möchte nachfolgenden für c++ geschriebene activeX function nutzen. GpsPos ist eine komplexe Structur, in der die Function das Ergebnis speichert. Delphi akzeptiert für *GpsPos aber nur einen Integer bzw. Longint-Wert und keinen Zeiger auf GpsPos. In C ist Pointer und long das gleiche und kann ausgetauscht bzw. zugewiesen werden.
Ich würde jetzt gerne den Wert der Speicherstelle auf den GpsPos zeigt (nicht den Inhalt) auslesen und dann als longint an die Function übergeben.


1.1 GetLastPosition(szID,*GpsPos)
This method return from the Database the last know position of the terminal.

Parameters:

[in] LPCTSTR szId.

String Terminal Identification.

[in] LONG *GpsPos.

Pointer to the GpsPos structure.



Return:

ERRORCODE. (View Error Codes Table).



Comments:

The application must allocate the position structure and pass to this method a pointer to this structure.

Chewie 25. Mär 2006 19:30

Re: Adresse eines pointers auslesen
 
Zeigertypen sind letztendlich auch nur Zahlen, auch wenn die Typprüfung des Compilers diese beiden Arten unterscheidet. Wenn du die Prüfung umgehen willst, einfach casten:

Delphi-Quellcode:
var
  p: Pointer;

SomeFunc(Integer(p)); //oder ein anderer Typ als Integer

ximo 26. Mär 2006 09:18

Danke
 
Danke, das hat mich ein Stück weiter gebracht. Ximo

SirThornberry 26. Mär 2006 10:07

Re: Adresse eines pointers auslesen
 
Da pointer aber nie negative Adressen haben können wäre es auch sinnvoller nicht zu Integer sondern zu DWORD/Cardinal zu casten.

ximo 26. Mär 2006 19:31

Re: Adresse eines pointers auslesen
 
im Prinzip hast du recht, aber Delphi aceptiert nur integer bzw. longint

himitsu 27. Mär 2006 11:14

Re: Adresse eines pointers auslesen
 
Im Grunde ist es auch egal, da Delphi normaler Weise eh nur 2 GB adressieren kann somit hätte man mit 'nem Integer eh vorteile, so ist z.B. alles kleiner 0 ein ungültiger Zeiger ^_^

jbg 27. Mär 2006 12:18

Re: Adresse eines pointers auslesen
 
Zitat:

Zitat von himitsu
somit hätte man mit 'nem Integer eh vorteile, so ist z.B. alles kleiner 0 ein ungültiger Zeiger ^_^

Nicht ganz.
  • In den oberen 2 GB (4GB-2GB) liegt Betriebssystemcode und auch der SharedMemory-Bereich.
  • Die CPU nutzt immer vorzeichenlose Adressen, also wird der negative Wert als vorzeichenlos interpretiert und man steht somit hinter dem 2GB Adress-Bereich.
  • In 64-Bit Systemen kann man einem 32-Bit Programm gestatten 4 GB für eigene Daten/Code zu nutzen.


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