AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi String to PWideChar, wie wird es gemacht ?
Thema durchsuchen
Ansicht
Themen-Optionen

String to PWideChar, wie wird es gemacht ?

Ein Thema von turboPASCAL · begonnen am 5. Dez 2009 · letzter Beitrag vom 5. Dez 2009
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 15:02
Zitat von turboPASCAL:
Hi,

ich habe ein kleines Problem mit der Umwandlung eines (Delphi6-Ansi)Strings in einen PWideChar-Typen.


Delphi-Quellcode:
function StringToPWideChar(const s: AnsiString): PWideChar;
var
  len: integer;
begin
  //Result := StringToOleStr(s); {StringToOleStr & SysFreeString haben ein Memleakproblem }

  len := MultiByteToWideChar(CP_ACP, 0, PAnsiChar(s), -1, nil, 0);
  GetMem(Result, Len+1);
  MultiByteToWideChar(CP_ACP, 0, PAnsiChar(s), -1, Result, Len);
end;

function FreePWChar(ws: PWideChar): Bool;
begin
  //SysFreeString(ws);

  if ws <> nil then FreeMem(ws);
end;

//Edit:
So klappts:

Delphi-Quellcode:
function StringToPWideChar(const s: AnsiString): PWideChar;
var
  len: integer;
begin
  //Result := StringToOleStr(s);

  if s <> 'then
  begin
    len := length(s);
    GetMem(Result, Len * 2);
    MultiByteToWideChar(CP_ACP, 0, PAnsiChar(s), -1, Result, Len);
  end else
    Result := #0;
end;

function FreePWChar(ws: PWideChar): Bool;
begin
  //SysFreeString(ws);

  if ws <> nil then FreeMem(ws);
end;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 15:57
*löscht mich*
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 16:02
Zitat von turboPASCAL:
GetMem(Result, Len * 2);
Besser wohl noch 2 Byte mehr damit auch für das \0 als String-Abschlusszeichen platz ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 16:17


Hm, wenn ich einen Platz von 24 Chars reserviere und dieser wird voll ausgelastet mit 24 Zeichen, muss der dennoch "genullt" werden ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 16:35
Auf jeden Fall. Sonst weiß der Benutzer des PWideChars ja gar nicht, wo der String aufhört.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: String to PWideChar, wie wird es gemacht ?

  Alt 5. Dez 2009, 16:49
Zitat von turboPASCAL:


Hm, wenn ich einen Platz von 24 Chars reserviere und dieser wird voll ausgelastet mit 24 Zeichen, muss der dennoch "genullt" werden ?
Ja. P(Wide)Chars haben im gegensatz zum Delphi (Wide)String keine längenangabe sondern nur die Regel: "Lies alle Zeichen bis zum ersten \0". Deshalb auch der Name "Nullterminierter String"
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:30 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