Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Pointer Frage (https://www.delphipraxis.net/155721-pointer-frage.html)

DelphiPeter 4. Nov 2010 21:35

Pointer Frage
 
Hallo Leute

also, ich versuche mich gerade an Zeigern, habe aber eine unklare Situation geschaffen.

Ich möchte als Beispiel, eine Stringliste erstellen, zurückgeben will ich den Zeiger als Integer Wert.
Danach möchte ich in die Stringliste etwas einfügen, habe den Wert den ich einfügen will, und den Zeiger auf die Liste als Integer.

WIE kann ich jetzt die Liste greifen und etwas eintragen?

Mein Versuch:

Delphi-Quellcode:
{...}
var
  zeiger: integer;
  p: pointer;
  strl, mylist: tstringlist;
begin
  strl := tstringlist.Create;
  strl.add('Hallo');
  p := @strl;
  zeiger := Integer(p);
  ShowMessage('Der Zeiger als Nummer: '+IntToStr(zeiger));

  mylist := TStringlist(Pointer(zeiger));
  mylist.Add('Welt!');

  ShowMessage(mylist.Text);
{...}

Assarbad 4. Nov 2010 21:36

AW: Pointer Frage
 
Nur als Warnung: dieser Code wird nicht mehr funktionieren, sobald Emb. einen 64bit-Compiler rausbringt.

jfheins 4. Nov 2010 21:40

AW: Pointer Frage
 
Zitat:

Zitat von Assarbad (Beitrag 1059764)
Nur als Warnung: dieser Code wird nicht mehr funktionieren, sobald Emb. einen 64bit-Compiler rausbringt.

Wir beide wissen, dass das keine größe Einschränkung ist :mrgreen:

@Topic: Es ist quasi sinnlos einen Zeiger auf ein Objekt zeigen zu lassen, da eine Objektreferenz bereits ein Zeiger ist.

==>
Delphi-Quellcode:
var
  p: tstringlist;
  strl, mylist: tstringlist;
begin
  strl := tstringlist.Create;
  strl.add('Hallo');
  p := strl;
  ShowMessage('Der Zeiger als Nummer: '+IntToStr(Integer(P)));

  mylist := p;
  mylist.Add('Welt!');

  ShowMessage(mylist.Text);

Assarbad 4. Nov 2010 21:41

AW: Pointer Frage
 
Zitat:

Zitat von jfheins (Beitrag 1059766)
Zitat:

Zitat von Assarbad (Beitrag 1059764)
Nur als Warnung: dieser Code wird nicht mehr funktionieren, sobald Emb. einen 64bit-Compiler rausbringt.

Wir beide wissen, dass das keine größe Einschränkung ist :mrgreen:

In dem Wissen, daß sie daran arbeiten, finde ich es schon sinnlos heute noch Code zu schreiben der nicht vorbereitet ist. :|

jfheins 4. Nov 2010 21:49

AW: Pointer Frage
 
Zitat:

Zitat von Assarbad (Beitrag 1059768)
In dem Wissen, daß sie daran arbeiten, finde ich es schon sinnlos heute noch Code zu schreiben der nicht vorbereitet ist. :|

Okay, ich bin da auch nicht mehr auf dem Laufenden - welcher Integer-Typ entspricht denn dann dem Pointer?

P.S.: Falls das ganze nur so eine Fingerübung ist, um mal ein wenig mit Pointer zu spielen empfehle ich für diesen Zweck records ;)

DelphiPeter 4. Nov 2010 22:00

AW: Pointer Frage
 
Ich glaube ich muss da weiter ausholen.

Ich arbeite mit einem Script Interpreter, die Verarbeitung von Listen, Dateien und anderen Objekten soll so wie folgt laufen:

Beispiel:
Delphi-Quellcode:
{...}
var list integer

list := ListCreate ()
ListAdd (list, 'mein Eintrag 1')
ListAdd (list, 'mein Eintrag 2')
ListSaveToFile (list, 'C:\MeineListe.txt')
ListFree (list)
{...}
Dafür ist es erforderlich, das ich mittels ListCreate eine Stringliste zur Laufzeit erzeuge, und diese Liste Anhand der "Nummer" - also dem Zeiger - identifizieren und verarbeiten kann.

Bummi 4. Nov 2010 22:04

AW: Pointer Frage
 
was spricht gegen

var list Pointer

??

DelphiPeter 4. Nov 2010 22:06

AW: Pointer Frage
 
Gute Idee, aber ich brauche die Adresse der Liste als Ganzzahl

Assarbad 4. Nov 2010 22:15

AW: Pointer Frage
 
Zitat:

Zitat von jfheins (Beitrag 1059769)
Zitat:

Zitat von Assarbad (Beitrag 1059768)
In dem Wissen, daß sie daran arbeiten, finde ich es schon sinnlos heute noch Code zu schreiben der nicht vorbereitet ist. :|

Okay, ich bin da auch nicht mehr auf dem Laufenden - welcher Integer-Typ entspricht denn dann dem Pointer?

In Delphi meines Wissens nach keiner. Im PSDK hat man ULONG_PTR und andere *_PTR deswegen eingeführt.

Bummi 4. Nov 2010 22:22

AW: Pointer Frage
 
Dann kannst Du ihn wie Du vorhattest (und fast alle es tun) als Integer casten.
gegf. habe wir alle Glück und Pointer werden wie Integer bei D64bit beide 8 Byte lang, dann passts eh wieder. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Seite 1 von 3  1 23      

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