AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeiten mit PChar

Ein Thema von Gambit · begonnen am 28. Feb 2005 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Arbeiten mit PChar

  Alt 28. Feb 2005, 13:25
Hallo,

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

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:29
Du musst für deinen DestString natürlich auch erst noch Speicher mit GetMem reservieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:31
Zitat von Gambit:
..
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:
Translate(srcString, DestString, false); Da SrcString schon vom Typ PChar ist, muss er nicht mehr nach PChar gecastet werden.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:32
Zitat von Luckie:
Du musst für deinen DestString natürlich auch erst noch Speicher mit GetMem reservieren.
Ging das nicht auch mit StrAlloc(...)?
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:41
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...
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#6

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:46
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;
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 13:54
jau Danke, jetzt hab' ichs begriffen. Funktion bringt bringt nur leider nicht das gewünschte Ergenbnis(der String sieht immer noch genauso aus)...
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 14:15
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.
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 15:09
Moin!

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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Arbeiten mit PChar

  Alt 28. Feb 2005, 15:10
Will Gambit es nicht einfach so ?
Delphi-Quellcode:
procedure test;
var srcString, DestString: string;
begin
  srcString:='a';
  DestString:='bb';
  Translate(PChar(srcString), PChar(DestString), false);
end;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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