2009-07-07 3 views
0

Ich habe eine sehr große Anzahl von App zu Delphi 2009 zu konvertieren und es gibt eine Reihe von externen Schnittstellen, die pAnsiChars zurückgeben. Hat jemand eine schnelle und einfache Möglichkeit, diese zurück in pChars zu werfen? Es gibt eine Menge an String zu PansiChar, aber viel kann ich auf der anderen Seite finden.Gibt es einen schnellen und schmutzigen Weg zu Cast PansiChar zu Pchar in Delphi 2009

+0

Ist 'pChr = PChar (String (AnsiString (pAnsiChr))) 'Sie suchen? – Fr0sT

Antwort

2

Delphi 2009 hat einen neuen String-Typ namens RawByteString hinzugefügt. Es ist definiert als:

Wenn Sie Binärdateien speichern müssen, die als PAnsiString eingehen, können Sie dies verwenden. Sie sollten den RawByteString wie zuvor mit AnsiString verwenden können.

Allerdings ist die empfohlene langfristige Lösung immer noch Ihre Programme in Unicode zu konvertieren.

+0

Sie müssen mit RawByteString vorsichtig sein. Genau wie andere String-Typen ist RawByteString immer noch mit einer Codepage verknüpft und verwendet diese Codepage während der Zuweisung zu/von Unicode-Zeichenfolgen. Der einzige Unterschied besteht darin, dass RawByteString die Codepage zur Laufzeit dynamisch ändern kann, während dies bei anderen Zeichenfolgen nicht der Fall ist. RawByteString ist nicht als eigenständiger String-Typ gedacht. Seine primäre (und nur empfohlene) Verwendung in Funktionsparametern, die sich nicht darum kümmern, welche Codepage für die Quellen-Ansi-Zeichendaten verwendet wird. –

+0

Dies ist ein Upgrade-Projekt und das Problem entsteht mit Code, der mit Windows (die ANSI-Zeichen erwartet und zurückgibt). –

2

Es gibt keine Möglichkeit, einen PAnsiChar in einen PChar zu "werfen". PChar ist Unicode in Delphi 2009. Ansi-Daten können nicht einfach in Unicode umgewandelt werden und umgekehrt. Sie müssen eine tatsächliche Datenkonvertierung durchführen. Wenn Sie einen PAnsiChar-Zeiger auf einige Daten haben und die Daten in eine Unicode-Zeichenfolge einfügen möchten, weisen Sie die PAnsiChar-Daten zuerst einer AnsiString zu und weisen Sie dann die AnsiString der Unicode-Zeichenfolge nach Bedarf zu. Wenn Sie eine Unicode-Zeichenfolge an einen PAnsiChar übergeben müssen, müssen Sie die Daten zuerst einer AnsiString zuweisen. Es gibt Artikel auf Embarcadero's und Blog-Websites, die Delphi 2009-Migrationsprobleme behandeln.

+0

Ich hüpfte, da war eine eingebaute Funktion, um das zu tun, was ich vermisste. Jetzt habe ich meine eigene Bibliothek von Funktionen, um die Konvertierungen durchzuführen. –