Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi string ein Alias für UnicodeString (https://www.delphipraxis.net/198780-string-ein-alias-fuer-unicodestring.html)

EWeiss 30. Nov 2018 08:17

AW: string ein Alias für UnicodeString
 
Zitat:

Zitat von mkinzler (Beitrag 1419724)
UnicodeString ist ein (von der Delphi RTL) verwalteter Typ, WideString nicht.

Bekomme ihn nicht konvertiert nach string kann machen was ich will.
Ka was du mir damit sagen willst. ;)

gruss

Uwe Raabe 30. Nov 2018 08:25

AW: string ein Alias für UnicodeString
 
In Delphi ist
Delphi-Quellcode:
string
ein managed type, um dessen Freigabe man sich nicht kümmern muss. UnicodeString ist nur ein Alias für
Delphi-Quellcode:
string
, so in der Art:
Delphi-Quellcode:
type
  UnicodeString = string;
Ein
Delphi-Quellcode:
WideString
ist ein non-managed type, um dessen Freigabe sich jemand kümmern muss. Eine Konvertierung von
Delphi-Quellcode:
WideString
nach
Delphi-Quellcode:
string
erzeugt einen neuen
Delphi-Quellcode:
string
, entbindet aber nicht von der Pflicht zur Freigabe des
Delphi-Quellcode:
WideString
.

EWeiss 30. Nov 2018 08:30

AW: string ein Alias für UnicodeString
 
Danke.
Er meldet mir hier einen Speicherleck.

Delphi-Quellcode:
FAudioSessionInfo.DisplayName := string(GetVerInfo(FileName));


DisplayName = string
GetVerInfo = WideString

Wenn ich jetzt den WideString von GetVerInfo an DisplayName übergebe wie soll ich ihn dann freigeben er wird im weiteren verlauf benötigt.
Hmmm....

gruss

Uwe Raabe 30. Nov 2018 08:38

AW: string ein Alias für UnicodeString
 
Zitat:

Zitat von EWeiss (Beitrag 1419729)
Er meldet mir hier einen Speicherleck.

Das ist nachvollziehbar.
Delphi-Quellcode:
GetVerInfo
liefert einen
Delphi-Quellcode:
WideString
zurück, um dessen Freigabe du dich kümmern musst. Die Konvertierung nach
Delphi-Quellcode:
string
erzeugt einen neuen
Delphi-Quellcode:
string
, lässt aber den Speicherbereich des
Delphi-Quellcode:
WideString
unangetastet. Da du an den
Delphi-Quellcode:
WideString
so aber nicht mehr herankommst, kannst du ihn auch nicht freigeben. Daher entsteht hier ein Speicherleck.

EWeiss 30. Nov 2018 08:39

AW: string ein Alias für UnicodeString
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1419730)
Zitat:

Zitat von EWeiss (Beitrag 1419729)
Er meldet mir hier einen Speicherleck.

Das ist nachvollziehbar.
Delphi-Quellcode:
GetVerInfo
liefert einen
Delphi-Quellcode:
WideString
zurück, um dessen Freigabe du dich kümmern musst. Die Konvertierung nach
Delphi-Quellcode:
string
erzeugt einen neuen
Delphi-Quellcode:
string
, lässt aber den Speicherbereich des
Delphi-Quellcode:
WideString
unangetastet. Da du an den
Delphi-Quellcode:
WideString
so aber nicht mehr herankommst, kannst du ihn auch nicht freigeben. Daher entsteht hier ein Speicherleck.

Ist also nicht zu beheben?

gruss

Uwe Raabe 30. Nov 2018 08:49

AW: string ein Alias für UnicodeString
 
Zitat:

Zitat von EWeiss (Beitrag 1419731)
Ist also nicht zu beheben?

Nein, solange du nicht den Rückgabetyp von GetVerInfo in string ändern kannst.

Ein WideString ist einfach nur ein Pointer auf ein WideChar-Array mit einem Längenbyte davor: http://docwiki.embarcadero.com/RADSt...deString-Typen

Bei einem string gibt es viel mehr Informationen: http://docwiki.embarcadero.com/RADSt...e_String-Typen

Delphi kann ja nicht einfach ein paar Daten vor dem WideString in den Speicher schreiben, um die fehlenden Informationen herzuzaubern.

EWeiss 30. Nov 2018 08:55

AW: string ein Alias für UnicodeString
 
Danke Uwe muss mal sehen wie ich das gelöst bekomme.

gruss

TiGü 30. Nov 2018 09:37

AW: string ein Alias für UnicodeString
 
Woher kommt denn diese Funktion GetVerInfo?
Sie scheint weder Bestandteil der Windows-API noch zum Delphi-Framework zugehörig zu sein.

EWeiss 30. Nov 2018 09:52

AW: string ein Alias für UnicodeString
 
Zitat:

Zitat von TiGü (Beitrag 1419738)
Woher kommt denn diese Funktion GetVerInfo?
Sie scheint weder Bestandteil der Windows-API noch zum Delphi-Framework zugehörig zu sein.

Von hier!
http://www.delphidabbler.com/articles.php?id=20

http://www.delphidabbler.com/articles?article=20#demo
http://www.delphidabbler.com/download?id=art-20

Ich habe es gelöst musste nur an der untersten Ebene anfangen zu suchen und dort die Datentypen nach WideString umlegen.
Da mir EurekaLog und ReportMemoryLeaksOnShutdown nichts mehr melden sollte es in Ordnung sein.

gruss

TiGü 30. Nov 2018 11:49

AW: string ein Alias für UnicodeString
 
Also in der Unit UVerInfoRoutines.pas aus dem article-20-demo.zip ist das wie folgt definiert:

Delphi-Quellcode:
{
GetVerInfo:
  Thin wrapper around API routine. Loads version information for a given file
  into a buffer. Raises exception if version information can't be read.
}
procedure GetVerInfo(const FileName: string; const Size: Integer;
  const Buffer: Pointer);
Delphi-Quellcode:
procedure GetVerInfo(const FileName: string; const Size: Integer;
  const Buffer: Pointer);
begin
  if not GetFileVersionInfo(PChar(FileName), 0, Size, Buffer) then
    raise Exception.Create('Can''t load version information');
end;
Das ist doch gänzlich was anderes als was du weiter oben im Thread verwendest.
Da scheint es eine function anstatt procedure zu sein.
Auch von WideString ist nichts zu lesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz