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/)
-   -   Delphi pChar nach string konvertieren ? (https://www.delphipraxis.net/113838-pchar-nach-string-konvertieren.html)

Andy386 15. Mai 2008 15:10


pChar nach string konvertieren ?
 
Also, ich hab ein bissl gegoogelt, ein bissl Forumsuche gemacht, aber nix gefunden.
Alles dreht sich immer darum, einen string zu einem pchar zu machen. Die verschiedenen Methoden kenne ich jetzt.
Aber wie geht es anders herum ?
Hier ein paar verzweifelte Versuche:
Delphi-Quellcode:
var pstr: pchar;
    sstr: shortstring;
    delphi_helper: Integer;
    str:string;
Delphi-Quellcode:
//        str:=pstr;        -> Absturz
//        strcopy(str,pstr); -> incompatible types


          for delphi_helper:=1 to ord(pstr[0]) do  //füllt meist nur das erste Element ?!
                      sstr[delphi_helper]:=pstr[delphi_helper];

          no:=;
          delete(sstr,pos('#',sstr),10000);  //ab und an sieht mein string so aus: '123'#A#...#...#...
          str:=String(sstr);                 //währe ja sowieso zu einfach
PS: str:=(string)pstr; bringt auch einen Absturz.


Der pchar kommt aus einer dll, zu der ich maximal die "Zugriffs"-Pascal-Datei ändern kann - habe dort aus pchar shortstring gemacht, kommt aber auch nur ein Absturz.

Apollonius 15. Mai 2008 15:14

Re: pChar nach string konvertieren ?
 
Du kannst nicht einfach die Deklaration der Funktionen ändern!
Eigentlich bist du schon ganz nahe dran. Anscheinend hast du aber noch den C-Cast-Style im Kopf. In Pascal musst du schreiben str := string(pstr);

brechi 15. Mai 2008 15:15

Re: pChar nach string konvertieren ?
 
Delphi-Quellcode:
var
  p: Pchar;
  s: String;


begin
p := 'test'
s := p;
so einfach :)

Delphi-Quellcode:
delete(sstr,pos('#',sstr),10000);  //ab und an sieht mein string so aus: '123'#A#...#...#...
das bei der anzeige sollte richtig sein, denn '123' ist der string # ist der hexwert wenn ich mich jetzt nicht vertuhe. also in dem String selbst ist dann keine # sondern der ascii wert der hinter der # steht (#A = ascii(10))

geskill 15. Mai 2008 15:17

Re: pChar nach string konvertieren ?
 
Delphi-Quellcode:
String(PChar)
PChar(String)
Mit DLL's musste da aufpassen, schick da nicht so viele Strings rum.

SirThornberry 15. Mai 2008 15:45

Re: pChar nach string konvertieren ?
 
du musst dir immer bewusst machen das ein PChar nur ein Pointer-Typ ist.

Folgendes solltest du zum Beispiel daher nie machen:
Delphi-Quellcode:
function Irgendwas(): PChar;
var
  meinString: String;
  meinPChar: PChar;
begin
  meinString := 'Text';
  meinPChar := PChar(meinString);
  result := meinPChar;
end;
denn zurück gegeben wird nur ein Pointer (PChar) auf meinString und meinString ist nach verlassen der Funktion nicht mehr gültig. PChar verhält sich also wie so ziemlich jeder andere Pointer und zeigt auf das erste Zeichen der Zeichenkette.

angos 15. Mai 2008 15:51

Re: pChar nach string konvertieren ?
 
und noch ne Lösung:

Delphi-Quellcode:

var
  s: String;
  p: PChar;

[...]
  StrPCopy(p, 'HALLO WELT'); // Schreibt 'Hallo Welt' in den PChar p
  s := StrPas(p); // Wandelt von Pchar nach String;

rollstuhlfahrer 15. Mai 2008 15:55

Re: pChar nach string konvertieren ?
 
Zitat:

Zitat von Andy386
Delphi-Quellcode:
delete(sstr,pos('#',sstr),10000);  //ab und an sieht mein string so aus: '123'#A#...#...#...

bei deinem netten ergebniss handelt es sich (ich sags auch mal) um das richtige Ergebniss. Dein #A sollte vielleicht nich gefolgt werden von einem #D und dann hat man schon einen mehrzeiligen String. Unter Windows wird eine neue Zeile mit Chr(10) und Chr(13) signalisiert. Soviel zu deinen #... Strings

rollstuhlfahrer

Andy386 15. Mai 2008 16:04

Re: pChar nach string konvertieren ?
 
Delphi-Quellcode:
s:=p
wirft Adressverletzung; hatte ich schon oben

Delphi-Quellcode:
s := string(p);
auch

Delphi-Quellcode:
  s := StrPas(p);
hatte ich noch nich, geht aber auch nich.


Hier die Wete aus dem Debug Inspector:
pstr: PAnsiChar $12F628
Wert 'wrong command'


ich bin echt gleich am Ende....

rollstuhlfahrer 15. Mai 2008 16:08

Re: pChar nach string konvertieren ?
 
dann versuchs mal mit

Delphi-Quellcode:
S := Copy(p, 1, maxInt);
rollstuhlfahrer

Nuclear-Ping 15. Mai 2008 16:58

Re: pChar nach string konvertieren ?
 
Zitat:

Zitat von Andy386
Delphi-Quellcode:
s:=p
wirft Adressverletzung; hatte ich schon oben

Delphi-Quellcode:
s := string(p);
auch

Delphi-Quellcode:
  s := StrPas(p);
hatte ich noch nich, geht aber auch nich.


Hier die Wete aus dem Debug Inspector:
pstr: PAnsiChar $12F628
Wert 'wrong command'


ich bin echt gleich am Ende....

Mach mal ein leeres Projekt und übernimm das Beispiel. s := p dürfte afaik keine Zugriffsverletzung werfen! :gruebel:


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

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