Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PChar als string übergeben? (https://www.delphipraxis.net/141098-pchar-als-string-uebergeben.html)

xZise 2. Okt 2009 11:25


PChar als string übergeben?
 
Hallo ihr,
ich habe folgendes Problem.
Und zwar habe ich eine Funktion die einen string annimmt. Allerdings kann ich dieser Funktion keinem PChar übergeben:
Delphi-Quellcode:
procedure Proc1(S : PChar);
begin
  Proc2(S);
end;

procedure Proc2(S : string);
begin
  [...]
end;
MfG
xZise

SirThornberry 2. Okt 2009 11:28

Re: PChar als string übergeben?
 
Ein PChar ist nichts anderes als ein Pointer. Ein String hingegen ist in Delphi etwas komplexer (Längenangabe, Referenzzählung etc.).
Wenn du nur einen PChar (Pointer auf Chars) hast und einen String benötigst musst du die Chars eben in einen String schreiben (sofern Delphi da nicht schon automatisch etwas convertiert).
Das kannst du zum einen in einer Schleife machen oder mit dem Befehl move.
An was genau scheiterst du dabei?

xZise 2. Okt 2009 11:32

Re: PChar als string übergeben?
 
Naja die Methode Proc2 weigert sich einen PChar anzunehmen. Und ich war/bin mir nicht sicher, wie man das am elegantesten macht. Ich meine von string zu PChar ist es einfach PChar(....) fertig ;)

MfG
xZise

Chris.R 2. Okt 2009 11:37

Re: PChar als string übergeben?
 
Hallo,

einfach so:

Delphi-Quellcode:
procedure Proc1(S : PChar);
begin
  Proc2(StrPas(S));
end;

procedure Proc2(S : string);
begin
  [...]
end;
Ciao Chris

Lannes 2. Okt 2009 11:48

Re: PChar als string übergeben?
 
oder
Delphi-Quellcode:
Proc2(String(PChar));

Sherlock 2. Okt 2009 12:09

Re: PChar als string übergeben?
 
Zitat:

Zitat von xZise
Naja die Methode Proc2 weigert sich einen PChar anzunehmen. Und ich war/bin mir nicht sicher, wie man das am elegantesten macht. Ich meine von string zu PChar ist es einfach PChar(....) fertig ;)

Und ich hatte mir noch nen Post mit der frage wie Du String nach PChar behandeln würdest verkniffen...
Transferleistung bitte!

;)

Sherlock

xZise 2. Okt 2009 16:19

Re: PChar als string übergeben?
 
Übrigens es hätte sowas doch funktioniert ;) Er hat nicht dabei rumgemeckert, sondern, dass ich zwei PChars miteinander verknüpfen wollte.
Wie lässt sich das den am besten regeln?

MfG
xZise

Apollonius 2. Okt 2009 16:24

Re: PChar als string übergeben?
 
Da gibt es kein Patentrezept. Das Problem ist, dass du Speicher reservieren und dementsprechend auch wieder freigeben musst. Wenn das ganze nur eine Routine lang halten muss, kannst du String(pc1) + String(pc2) verwenden.

himitsu 2. Okt 2009 16:28

Re: PChar als string übergeben?
 
ich hatte mich schon gewundert.

von PChar nach String macht die CompilerMagic ja automatisch,
nur andersrum geht's natürlich nicht.


Delphi-Quellcode:
STRING := String(PCHAR) + String(PCHAR);
aber wenn du mit einem String anfängst, dann könnte man da auch wieder die CompilerMagic ausnutzen und
Delphi-Quellcode:
STRING := String(PCHAR) + PCHAR;
rein logisch geht dieses auch,
Delphi-Quellcode:
PCHAR := PChar(String(PCHAR) + PCHAR);
aber da man nicht beeinflussen kann, wie der interne temporäte String verwaltet wird, ist natürlich nicht sichergestellt, wie lange der Ergebnis-PChar, auf diesen temporären String, gültig ist/bleibt.

xZise 2. Okt 2009 20:58

Re: PChar als string übergeben?
 
Hehe, also ich ha be sowas gebastelt (was im Allgemeinen ja eures ist):
Delphi-Quellcode:
var
  s : string;
begin
  s := MyPChar1;
  s := s + MyPChar2;
end;
MfG
xZise


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