![]() |
Delphi-Version: XE
Umstellung Projekt von 2007 auf XE: wie Strindeklarationen anpassen?
Servus,
nachdem ich zur Zeit das zweifelhafte Vergnügen habe, eine bestehende Delphi 2007 Anwendung nach XE zu portieren mal eine Frage zu Stringdeklarationen: ich habe eine Unit, die Aufrufe aus der DEC 5.3 Library kapselt, z.B.
Delphi-Quellcode:
Aufgerufen wird die Funktion an diversen Stellen, die nach einer Umstellung auf Delphi XE durchaus auch Unicodedaten enthalten können. Wie müßte ich denn diese Funktion nun korrekt übersetzen? Erschwerend kommt hinzu, daß die Unit auch weiterhin von Delphi 2007 (und tiefer) Projekten dann verwendet wird, sprich auch unter nicht Unicode Delphi noch funktionieren muß. Und das das Folgende nur eine Beispiel ist, würde ich bedingte Compilierung so gut es geht vermeiden wollen.
function StrToMime64(const AString: String): String;
... function StrToMime64(const AString: String): String; begin Result := TFormat_MIME64.Encode(AString); end; Im Unicode Fall erwartet und liefert TFormat_MIME64 ja einen RayByteString. Wie kann man hier denn nun diverse Warnungen verhindern (speziell die mit Datenverlust). Hier mal die diversen Varianten, die mir so in den Sinn kommen, wobei ich bei keiner so wirklich sicher bin, ob sie korrekt ist:
Delphi-Quellcode:
// dann aber W1058/1057 Warnung, da String auf RawByteString gewandelt wird
function StrToMime64(const AString: String): String; ... function StrToMime64(const AString: String): String; begin Result := TFormat_MIME64.Encode(AString); end;
Delphi-Quellcode:
// dann aber W1058/1057 Warnung beim Aufruf der Funktion mit String, da String auf AnsiString gewandelt wird
function StrToMime64(const AString: AnsiString): AnsiString; ... function StrToMime64(const AString: AnsiString): AnsiString; begin Result := TFormat_MIME64.Encode(AString); end;
Delphi-Quellcode:
Momentan tendier ich hier zur letzten Variante.
// dann kommt zumindest mal keine Warnung
function StrToMime64(const AString: String): AnsiString; ... function StrToMime64(const AString: String): AnsiString; begin Result := TFormat_MIME64.Encode(AnsiString(AString)); end; Wie ist es nun bei der Umkehrung
Delphi-Quellcode:
Welches ist hier die korrekte XE Variante:
function Mime64ToStr(const AData: String): String;
... function Mime64ToStr(const AData: String): String; begin Result := TFormat_MIME64.Decode(AData); end;
Delphi-Quellcode:
oder
// gibt aber Warnung 1058 da String implicit auf RayByteString gecastet wird
function Mime64ToStr(const AData: String): String; ... function Mime64ToStr(const AData: String): String; begin Result := TFormat_MIME64.Decode(AData); end;
Delphi-Quellcode:
Und wie ist das eigentlich bei den Rückgabewerten in den letzten beiden Fällen: Macht der implizite Cast von RawByteString auf String hier irgendwelche Probleme bzgl. Codepages bzw. muß man das erst in einen AnsiString laden und dann ans Ergebnis schreiben:
function Mime64ToStr(const AData: String): String;
... function Mime64ToStr(const AData: String): String; begin Result := TFormat_MIME64.Decode(RawByteString(AData)); end;
Delphi-Quellcode:
Irgendwie bin ich bei diesen ganzen Stringvarianten nun ziemlich durcheinander gekommen. :roteyes:
function Mime64ToStr(const AData: String): String;
... function Mime64ToStr(const AData: String): String; var asResult: AnsiString; begin asResult := TFormat_MIME64.Decode(RawByteString(AData)); Result := asResult; end; Danke, Uli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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