![]() |
Incompatible types beim Zusammensetzen von WideChars
Kann mir bitte jemand erklären wieso dieser Code unter Delphi 7 nicht kompiliert (Incompatible types)
Delphi-Quellcode:
Gibt es eine Alternative?
var s1,s2: widestring;
.. s1 := 'abc'; s2 := s1[1] + s1[2]; // fehler |
AW: Incompatible types beim Zusammensetzen von WideChars
Du hast vergessen die ganze Fehlermeldung zu kopieren.
Und ich wette da steht die Lösung drin. :roll: Expliziter Typecast oder ![]() |
AW: Incompatible types beim Zusammensetzen von WideChars
Hab ich nicht, das ist alles:
[Error] UppercaseUnit1.pas(60): Incompatible types |
AW: Incompatible types beim Zusammensetzen von WideChars
Ohhh, ich dachte auch damals wurden schon beide Typen genannt. :oops:
Zitat:
|
AW: Incompatible types beim Zusammensetzen von WideChars
Die Fehlermeldung verstehe ich trotzdem nicht.
s2 ist doch ein widestring. s1[1] und s1[2] sind widechars. Wieso darf ich zwei widechars nicht zu einem widestring zusammensetzen? es klappt schließlich mit chars und strings. |
AW: Incompatible types beim Zusammensetzen von WideChars
Nicht für alle Typen sind alle Operationen gleich implementiert.
String/AnsiString ist ein LongString (intern ein aufgemotztes dynamisches Char-Array). Der Typ "String[123]" und ShortString sind ShortString (intern ein Record). UnicodeString (seit D2009) ist auch ein LongString. WideString ist die Kapseltung einer WinAPI ( ![]() Ich hatte mal das Problem, dass für String und Variant die Reihenfolge von "OR" anders ausgewertet wird. Beim String->Variant kam erst das OR und dann der implizite Typcast und bei Variant->String erst der Typcast und dann das OR, was dann fröhlich knallte. |
AW: Incompatible types beim Zusammensetzen von WideChars
Zitat:
"WideString Der Typ WideString repräsentiert einen dynamisch zugewiesenen String mit 16-Bit-Unicode-Zeichen. In einigen Punkten entspricht er mit dem Typ AnsiString. In Win32 ist der Typ WideString kompatibel mit dem COM-Typ BSTR. WideString ist für COM-Anwendungen geeignet. WideString verfügt aber über keinen Referenzzähler, deshalb ist UnicodeString für andere Anwendungstypen flexibler und effizienter. Eine zuverlässige Indizierung von WideString-Multibyte-Strings ist nicht möglich, da S[i] das i-te Element (und nicht notwendigerweise das i-te Zeichen) in S repräsentiert. Die Typen Char und PChar sind in Delphi WideChar- bzw. PWideChar-Typen." ms-help://embarcadero.rs_xe7/rad/String-Typen_(Delphi).html |
AW: Incompatible types beim Zusammensetzen von WideChars
Eine zuverlässige Indizierung von WideString-Multibyte-Strings ist nicht möglich, da S[i] das i-te Element (und nicht notwendigerweise das i-te Zeichen) in S repräsentiert.
Das finde ich verwirrend. Wenn man auf WideString per s[i] zugreift ist i immer das i-te Zeichen im s (so lange korrekte UTF16-Daten im S vorliegen). D.h. bei einem string "ab" UTF16: $61 00 $ 62 00 ist s[2] = $62 00 und nicht 00 |
AW: Incompatible types beim Zusammensetzen von WideChars
Hmmm... mit D2007 kompiliert das:
Delphi-Quellcode:
In dem Thema ist Varianz drin. :mrgreen:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; var s1, s2: WideString; begin s1 := 'abc'; s2 := s1[1] + s1[2]; // fehler end. |
AW: Incompatible types beim Zusammensetzen von WideChars
Zitat:
Was in den "User defined character ranges" sich versteckt, dass weiß Keiner. Ja, in Delphi fangen Strings bei 1 an, als Kompatibilität auf den ersten Delphi-Stringtypen (ShortString), aber da sei Crossplatform können Strings plötzlich auch mal bei 0 anfangen (standardmäßig auf Android und iOS). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
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-2025 by Thomas Breitkreuz