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 auf einen String (https://www.delphipraxis.net/57693-pointer-auf-einen-string.html)

igel457 25. Nov 2005 09:52


Pointer auf einen String
 
Ich hab mal noch eine Frage...

Wie kann ich einen Pointer auf einen String herstellen.

So...
Delphi-Quellcode:
var roomid:string;
    ptr:Pointer;
ptr := @roomid;
showmessage(pchar(base.settings.Items[i].ptr)^);
...bekomme ich nur einen "|" als Antwort, wenn ich @roomid[i] schreibe bekomme ich nur den ersten Buchstaben.

Danke für eure Hilfe, Igel457

Bernhard Geyer 25. Nov 2005 09:57

Re: Pointer auf einen String
 
Delphi-Quellcode:
var
  roomid:string;
  ptr: PChar;
begin
  ptr := PChar(roomid);
  showmessage(ptr);
end;

igel457 25. Nov 2005 09:58

Re: Pointer auf einen String
 
Mein Compiler meckert mir "Ungültige Typumwandlung"... Trotzdem Danke

igel457 25. Nov 2005 10:07

Re: Pointer auf einen String
 
:wall:

Ich nehme (fast) alles zurück... Bei mir sieht es im Groben so aus (ptr2 muss leider sein)
Delphi-Quellcode:
var
  roomid:string;
  ptr: PChar;
  ptr2:pointer;
begin
  ptr := PChar(@roomid);
  ptr2 := ptr;
  showmessage(pchar(ptr));
end;
:bounce1:

Danke!

Bernhard Geyer 25. Nov 2005 10:11

Re: Pointer auf einen String
 
Zitat:

Zitat von igel457
Mein Compiler meckert mir "Ungültige Typumwandlung"... Trotzdem Danke

Wenn showmessage die Standard-Delphi-Methode ist, ist es klar. Die brauch natürlich eine String.

Delphi-Quellcode:
var
  roomid:string;
  ptr: PChar;
  tmp: string;
begin
  ptr := PChar(roomid);
  tmp := ptr;
  showmessage(tmp);
end;

igel457 25. Nov 2005 10:18

Re: Pointer auf einen String
 
:gruebel: Nein... Das war ein Mistverständnis... Hier: -> ptr := PChar(@roomid); <- kam der Fehler!
Das mit "ShowMessage" war nur ein Beispiel von mir um klar zu machen was ich wollte... :-D

himitsu 25. Nov 2005 10:29

Re: Pointer auf einen String
 
@S zeigt auf den internen Pointer des Stgings (jener, welcher speichert wo die Stringdaten abgelegt sind), wenn du einen Pointer auf den String selber haben möchtest, dann verwende Pointer(S), hol dir den Pointer auf das erste Zeichen @S[1], oder caste diesen nach PChar/PAnsiChar PChar(S).

wobei ich dir wohl empfehlen würde die Varianten mit @S[1] und PChar(S) zu verwenden, daß direkte umwandeln per Pointer(S) geht zwas schneller und erzeugt weniger Code, aber wenn man nicht weiß was man macht, dann kann man sich einige Probleme damit einhandeln, wobei bei den anderen beiden Varianten die CompilerMagic einem etwas Arbeit abnimmt.

jim_raynor 25. Nov 2005 10:33

Re: Pointer auf einen String
 
Funktioniert denn nicht, bzw. was funktioniert nicht dadran?:
Delphi-Quellcode:
var roomid:string;
    ptr: PString;
ptr := @roomid;
showmessage(ptr^);
Wo du aufpassen musst, ist dass der Ausgangsstrings noch nicht wieder gelöscht ist (zum Beispiel Funktion in dem der String deklariert ist, wurde verlassen).

igel457 25. Nov 2005 10:39

Re: Pointer auf einen String
 
Nein, das funktioniert nicht...
Die Lösung von Oben ist schon Okay.

jim_raynor 25. Nov 2005 11:33

Re: Pointer auf einen String
 
Zitat:

Zitat von igel457
Nein, das funktioniert nicht...

Mich würde mal interessieren was nicht klappt!

Zitat:

Zitat von igel457
Die Lösung von Oben ist schon Okay.

Aber erreichst du damit auch dein Ziel, dass du dann einfach die Variable ändern kannst, auf die dein Pointer zeigt? Denn Hin- und Herkopieren ist ja einfach.

Kannst du denn jetzt in Ptr was schreiben, so dass es dann auch direkt in RoomId ohne irgendwelche Umwandlungen drin steht?

Sorry, hab im Moment kein Delphi hier, sonst hätte ich es schon längst ausprobiert ;)


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