Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zu PWideChar umwandeln (https://www.delphipraxis.net/23371-string-zu-pwidechar-umwandeln.html)

MrKnogge 2. Jun 2004 00:01


String zu PWideChar umwandeln
 
Moin !

Ich muss einen String in einen PWideChar umwandeln, bei
Delphi-Quellcode:
:= PWideChar(StringList1.Strings[i]);
bekomme ich die Compilermeldung:
Zitat:

[Warnung] Unit1.pas(1384): Bedenkliche Typumwandlung von String in PWideChar
Wo Delphi auch recht hat, den das was letztendlich amBildschirm erscheint, ist alles andere als mein String :cry:


Ich brauche dies, um bei die Gruppennamen eines ListViews (siehe bsp. im swissdelphicenter) vom Benutzer festlegen lassen möchte.

Muetze1 2. Jun 2004 00:50

Re: String zu PWideChar umwandeln
 
Moin!

Zitat:

Zitat von Delphi 5 OH
StringToWideChar konvertiert einen Pascal-String in einen UNICODE-String.

Unit

System

Kategorie

Multibyte-Zeichen

function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;

Beschreibung

StringToWideChar wandelt den in Source übergebenen String von ANSI in Unicode um und speichert das Ergebnis in dem durch Dest und DestSize angegebenen Puffer. Der Puffer Dest enthält nach dem Aufruf höchstens DestSize - 1 Zeichen des Quell-Strings und das Wide-Zeichen NULL. StringToWideChar gibt einen Zeiger auf Dest zurück.

MfG
Muetze1

MrKnogge 2. Jun 2004 09:29

Re: String zu PWideChar umwandeln
 
Hi,

ich hab jetzt folgendes probiert:

Delphi-Quellcode:
StringToWideChar(string1, PWideChar1, 256);

und

PWideChar1 := StringToWideChar(string1, PWideChar2, 256);
bei beiden erhalte ich folgende Fehlermeldung
Zitat:

Zugriffsverletzung bei Adresse 004050AC in Modul 'Project1.exe'. Schreiben von Adresse 00000000
Was mache ich falsch :gruebel:

Bernhard Geyer 2. Jun 2004 09:46

Re: String zu PWideChar umwandeln
 
Wenn Du den String nur Lese-Technisch benötigst
Delphi-Quellcode:
var
  wStr: WideString;
  pwStr: PWideString;
begin
  wStr := StringList1.Strings[i]
  pwStr := PWideChar(wStr);
end;

generic 2. Jun 2004 09:55

Re: String zu PWideChar umwandeln
 
wenn ihr typen hab wo ein P vorsteht sind das pointer.
pointer zeigen auf speicherbereicht.
wenn ihr dort kein platz schafft das wird das nix und schutzverletzungen sind an der tages ordnung.

Delphi-Quellcode:
getmem(PWideChar2, 256);
PWideChar1 := StringToWideChar(string1, PWideChar2, 256);
ach ja und bitte nicht den freemem vergesssen

MrKnogge 2. Jun 2004 09:59

Re: String zu PWideChar umwandeln
 
Wow, Danke. Zum lesen reicht der mir alle mal.

warn nur 2 kleine Fehlerchen drinnen, kleiner Fehler

Delphi-Quellcode:
var
  wStr: WideString;
  pwStr: PWideChar; // einmal hier
begin
  wStr := StringList1.Strings[i]; // und anschliesend ein semikolon *gg
  pwStr := PWideChar(wStr);
end;
[Edit=Den Post gabs vorher noch nicht]

Zitat:

Zitat von generic
wenn ihr typen hab wo ein P vorsteht sind das pointer.
pointer zeigen auf speicherbereicht.
wenn ihr dort kein platz schafft das wird das nix und schutzverletzungen sind an der tages ordnung.

Delphi-Quellcode:
getmem(PWideChar2, 256);
PWideChar1 := StringToWideChar(string1, PWideChar2, 256);
ach ja und bitte nicht den freemem vergesssen

Werd ich mal probieren, dachte nur das dies die funktion selber übernimmt, da man ja die größe für den Puffer angeben muss.

Motzi 2. Jun 2004 10:22

Re: String zu PWideChar umwandeln
 
Zitat:

Zitat von MrKnogge
Werd ich mal probieren, dachte nur das dies die funktion selber übernimmt, da man ja die größe für den Puffer angeben muss.

Ja, die Größe des Puffers den man reserviert hat..! ;)

Muetze1 2. Jun 2004 11:43

Re: String zu PWideChar umwandeln
 
Moin!

Bei GetMem() beachten, das ein PWideString pro Zeichen 2 Byte verwendet, also für einen Buffer für 256 Zeichen muss man 512 Bytes alloziieren...

MfG
Muetze1


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