Ich aktualisiere einen älteren Delphi-Code (ab 2003) zu Delphi Architect XE und stoße auf ein paar Probleme. Ich bekomme eine Reihe von Fehlern, wenn es inkompatible Typen gibt. Diese Fehler treten in Delphi 6 nicht auf, daher muss ich annehmen, dass dies darauf zurückzuführen ist, dass die Dinge aktualisiert wurden.
Ich weiß ehrlich nicht, was der Unterschied zwischen PAnsiChar und PWideChar ist, aber Delphi kennt den Unterschied und lässt mich nicht kompilieren. Wenn ich wüsste, was die Unterschiede sind, könnte ich vielleicht herausfinden, was ich verwenden soll oder wie ich das beheben kann.
Kurz: vor Delphi 2009 war der ursprüngliche String-Typ in Delphi ANSI CHAR: Jedes Zeichen in jeder Zeichenfolge wurde als 8-Bit-Zeichen dargestellt. Beginnend mit Delphi 2009 wurden die Strings von Delphi UNICODE, wobei die UTF-16-Notation verwendet wurde: Jetzt verwendet das grundlegende Zeichen 16 Datenbits (2 Bytes), und Sie müssen wahrscheinlich nicht viel über die Unicode-Codepunkte wissen, die als zwei dargestellt werden aufeinanderfolgende 16-Bit-Zeichen.
Die 8-Bit-Zeichen werden "Ansi-Zeichen" genannt. Ein PAnsiChar ist ein Zeiger auf 8-Bit-Zeichen. Die 16-Bit-Zeichen werden "Wide Chars" genannt. Ein PWideChar ist ein Zeiger auf 16-Bit-Zeichen. Delphi kennt den Unterschied und tut gut, wenn es Ihnen nicht erlaubt, die zwei zu mischen!
Weitere Informationen
Hier ist ein beliebter Link zu Unicode: Das absolute Minimum, das jeder Softwareentwickler unbedingt, unbedingt über Unicode und Zeichensätze wissen muss
Weitere Informationen zum Migrieren von Delphi zu Unicode finden Sie hier: Neues Whitepaper: Delphi-Unicode-Migration für mere Sterbliche
Sie können SO auch nach "Delphi Unicode migration" suchen.
Vor ein paar Jahren wurde der Standardzeichentyp in Delphi von AnsiChar
(Einzelbytevariable, die ein ANSI-Zeichen darstellt) in WideChar
geändert (Zweibytevariable, die ein UTF16-Zeichen darstellt). Der char
-Typ ist jetzt ein Alias für WideChar
anstelle von AnsiChar
, der string
-Typ ist jetzt ein Alias für UnicodeString
(eine UTF-16 Unicode-Version von Delphis traditionellem String-Typ) anstelle von AnsiString
und PChar
type ist jetzt ein Alias für PWideChar
anstelle von PAnsiChar
.
Der Compiler kann sich um viele Conversions selbst kümmern, aber es gibt ein paar Probleme:
PChar
, müssen Sie sicherstellen, dass der Zeiger auf den richtigen Datentyp zeigt, und der Compiler kann dies nicht immer überprüfen. string
als praktischen Byte-Array-Puffer zum Speichern beliebiger Daten anstelle einer Variablen verwenden, die Text enthält, funktioniert das nicht als UnicodeString
. Stellen Sie sicher, dass diese als Umgehung für RawByteString
deklariert sind. char
ein Byte lang ist. Sehen Sie sich Delphi-Unicode-Migration für Mere Mortals an, um weitere Tricks und Ratschläge zu erhalten, wie Sie dies zum Laufen bringen können . Es ist nicht so schwer wie es klingt, aber es ist auch nicht trivial. Viel Glück!