![]() |
Arbeiten mit PChar
Hallo,
ich habe hier eine Funktion die als Parameter den Typ PChar erwartet:
Delphi-Quellcode:
Angenommen ich habe jetzt einen String den ich nach "Dest" umwandeln will dann funzt nicht:
function Translate(Src, Dest: PChar; ToOem: Boolean): Integer; virtual;
Delphi-Quellcode:
Bekomm ich eine Speicherzugriffsverletzung...
procedure test;
var srcString, DestString: PChar; begin srcString:= ...; Translate(PChar(srcString), DestString, false); end; wie müsste es denn richtig heißen? Gruß Gambit |
Re: Arbeiten mit PChar
Du musst für deinen DestString natürlich auch erst noch Speicher mit GetMem reservieren.
|
Re: Arbeiten mit PChar
Zitat:
Delphi-Quellcode:
Da SrcString schon vom Typ PChar ist, muss er nicht mehr nach PChar gecastet werden.
Translate(srcString, DestString, false);
MfG Binärbaum |
Re: Arbeiten mit PChar
Zitat:
|
Re: Arbeiten mit PChar
Zitat:
|
Re: Arbeiten mit PChar
Zitat:
Delphi-Quellcode:
In deinem Fall ist das aber anders, da zur Kompilierzeit noch nichts zugewiesen wird. Daher musst du erst genug Speicher reservieren, in dem dann dein String Platz findet. Also etwa so:
var
str: PChar; begin str := 'Beispieltext'; end;
Delphi-Quellcode:
var
SrcStr, DestStr: PChar; begin SrcStr := 'Beispieltext'; GetMem(DestStr, Length(SrcStr)); Translate(SrcStr, DestStr, False); // ...und am Ende nicht vergessen: FreeMem(DestStr); end; |
Re: Arbeiten mit PChar
jau Danke, jetzt hab' ichs begriffen. Funktion bringt bringt nur leider nicht das gewünschte Ergenbnis(der String sieht immer noch genauso aus)... :(
|
Re: Arbeiten mit PChar
Zitat:
|
Re: Arbeiten mit PChar
Moin!
Zitat:
MfG Muetze1 |
Re: Arbeiten mit PChar
Will Gambit es nicht einfach so :gruebel: ?
Delphi-Quellcode:
procedure test;
var srcString, DestString: string; begin srcString:='a'; DestString:='bb'; Translate(PChar(srcString), PChar(DestString), false); end; |
Re: Arbeiten mit PChar
Moin!
Die Funktion kann im Worst-Case Fall doppelt so lange Zeichenketten zurück geben, also:
Delphi-Quellcode:
MfG
procedure test(Const ASrcString: String);
var DestString: string; begin SetLength(DestString, 2*Length(ASrcString)); Translate(PChar(ASrcString), PChar(DestString), false); // Hier noch mit SetLength() den DestString auf die zurück gegebene Anzahl von zeichen kürzen... end; Muetze1 |
Re: Arbeiten mit PChar
was genau ist ein "Worst-Case Fall" ? ich meine wieso koennen doppelt soviele zeichen zurückgegeben werden ?
|
Re: Arbeiten mit PChar
Zitat:
Ich würde viel jetzt viel lieber wissen, warum die Funktion nicht das tut was sie soll... |
Re: Arbeiten mit PChar
Zitat:
|
Re: Arbeiten mit PChar
Zitat:
|
Re: Arbeiten mit PChar
jepp und wenn ich anstelle von translate
Delphi-Quellcode:
benutze, wo ich's mit der Speicherreservierung genauso handhaben muss, funzt es auch. Warum TDataSet.translate nicht funzt obwohl es genau das machen soll was OemToCharBuff macht, weiß ich auch nicht...
OemToCharBuff(Pointer(S), Pointer(S), Length(S));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr. |
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