Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - StrCopy und Teilstrings?


Wolle92 - Sa 08.09.07 09:29
Titel: StrCopy und Teilstrings?
Hallo,
Ich wüsste gerne, wie ich Teilstrings eines PChar-Strings in einen anderen kopieren kann...


Gausi - Sa 08.09.07 10:55

Auf Anhieb würde ich den PChar nach String casten und dann mit Pos und Copy arbeiten.


jasocul - Sa 08.09.07 10:59

StrLCopy könnte hilfreich sein.
In der Hilfe von Delphi findest Du unter String-Verarbeitung (nullterminiert) noch ein ganze Menge mehr Funktionen.


Wolle92 - Sa 08.09.07 11:05

Mit StrLCopy kann man aber nur einen Teilstring am Anfang kopieren... das will ich aber nicht


jasocul - Sa 08.09.07 11:11

Hast Du Dir die weiteren Funktionen mal angesehen (z.B. StrMove)? Du musst als "Source" ja nicht am Anfang des "alten" Strings anfangen. :wink:

Ansonsten solltest Du Gausis Rat befolgen. Wenn ich nicht zwingend mit PChar arbeiten muss, arbeite ich oft genauso.


Wolle92 - Sa 08.09.07 13:14

Kann man denn in DLLs Strings benutzen, wenn die nicht nach außen gebracht werden?


jaenicke - Sa 08.09.07 13:51

Ja, kann man, Probleme bekommst du nur, wenn du Strings als Parameter oder Rückgabewerte von exportierten Funktionen benutzt, die du dann also von außerhalb aufrufst. Innerhalb der DLL kannst du alles ganz normal nutzen (ohne ShareMem und die DLL natürlich ;-)).


Wolle92 - Sa 08.09.07 14:52

Aha, ok, aber kannst du mir erklären, wieso diese funktionsweise nicht funktioniert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function decode(text: PChar): PChar; export;
var current, text2, result2: String;
begin
  result2 := '';
  text2 := String(text);
  while not (text2 = ''do
  begin
    current := Copy(text2,1,Pos('z',text2)-1);
    text2 := Copy(text2,Pos('z',text2)+1,Length(text2)-Pos('z',text2));
    result2 := result2 + Chr(Byte(StrtoInt(current)));
  end;
  result := PChar(result2);
end;

Wenn ich aber vor current := Copy(text2,1,Pos('z',text2)-1); ein beliebiges ShowMessage setze, alles einwandfrei funktioniert?


jaenicke - Do 13.09.07 00:16

Tut mir leid, ich hatte den Thread aus den Augen verloren, deshalb die späte Antwort.

Was passiert denn? Ich meine, ich kann das auch einfach mal ausprobieren, aber das kannst du ja eigentlich auch gleich selbst sagen.