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 Arbeiten mit PChar (https://www.delphipraxis.net/41239-arbeiten-mit-pchar.html)

Gambit 28. Feb 2005 13:25


Arbeiten mit PChar
 
Hallo,

ich habe hier eine Funktion die als Parameter den Typ PChar erwartet:

Delphi-Quellcode:
function Translate(Src, Dest: PChar; ToOem: Boolean): Integer; virtual;
Angenommen ich habe jetzt einen String den ich nach "Dest" umwandeln will dann funzt nicht:

Delphi-Quellcode:
procedure test;
var srcString, DestString: PChar;
begin
  srcString:= ...;
  Translate(PChar(srcString), DestString, false);
end;
Bekomm ich eine Speicherzugriffsverletzung...

wie müsste es denn richtig heißen?

Gruß

Gambit

Luckie 28. Feb 2005 13:29

Re: Arbeiten mit PChar
 
Du musst für deinen DestString natürlich auch erst noch Speicher mit GetMem reservieren.

Binärbaum 28. Feb 2005 13:31

Re: Arbeiten mit PChar
 
Zitat:

Zitat von Gambit
..
Delphi-Quellcode:
function Translate(Src, Dest: PChar; ToOem: Boolean): Integer; virtual;
Angenommen ich habe jetzt einen String den ich nach "Dest" umwandeln will dann funzt nicht:

Delphi-Quellcode:
procedure test;
var srcString, DestString: PChar;
begin
  srcString:= ...;
  Translate(PChar(srcString), DestString, false);
end;
...
wie müsste es denn richtig heißen?

Du müsstest die Zeile mit Translate(...); folgendermaßen ändern:
Delphi-Quellcode:
Translate(srcString, DestString, false);
Da SrcString schon vom Typ PChar ist, muss er nicht mehr nach PChar gecastet werden.

MfG
Binärbaum

Binärbaum 28. Feb 2005 13:32

Re: Arbeiten mit PChar
 
Zitat:

Zitat von Luckie
Du musst für deinen DestString natürlich auch erst noch Speicher mit GetMem reservieren.

Ging das nicht auch mit StrAlloc(...)? :gruebel:

Gambit 28. Feb 2005 13:41

Re: Arbeiten mit PChar
 
Zitat:

Zitat von Binärbaum
Da SrcString schon vom Typ PChar ist, muss er nicht mehr nach PChar gecastet werden.

MfG
Binärbaum

Achne, das ist nat. mein Fehler, srcString soll vom Typ String sein. Es liegt wohl an der von Lucky geschilderten Tatsache, dass ich Speicher reservieren muss. Weiß jetzt nur nicht genau wie...

Oxmyx 28. Feb 2005 13:46

Re: Arbeiten mit PChar
 
Zitat:

Zitat von Gambit
Achne, das ist nat. mein Fehler, srcString soll vom Typ String sein. Es liegt wohl an der von Lucky geschilderten Tatsache, dass ich Speicher reservieren muss. Weiß jetzt nur nicht genau wie...

Wenn du ein Stringliteral schon während der Kompilierzeit zuweist, reserviert der Compiler automatisch Speicher dafür. Zum Beispiel:

Delphi-Quellcode:
var
  str: PChar;
begin
  str := 'Beispieltext';
end;
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:

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;

Gambit 28. Feb 2005 13:54

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)... :(

Binärbaum 28. Feb 2005 14:15

Re: Arbeiten mit PChar
 
Zitat:

Zitat von Oxmyx
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;

Man sollte den Speicher reservieren, bevor man etwas in den PChar schreibt.

Muetze1 28. Feb 2005 15:09

Re: Arbeiten mit PChar
 
Moin!

Zitat:

Zitat von Binärbaum
Man sollte den Speicher reservieren, bevor man etwas in den PChar schreibt.

Ja, und? Wo ist das Problem? Macht das irgendwer hier anders?

MfG
Muetze1

Khabarakh 28. Feb 2005 15:10

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;


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