AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Umstellung Projekt von 2007 auf XE: wie Strindeklarationen anpassen?
Thema durchsuchen
Ansicht
Themen-Optionen

Umstellung Projekt von 2007 auf XE: wie Strindeklarationen anpassen?

Ein Thema von ULIK · begonnen am 13. Apr 2011
Antwort Antwort
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#1

Umstellung Projekt von 2007 auf XE: wie Strindeklarationen anpassen?

  Alt 13. Apr 2011, 14:51
Delphi-Version: XE
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:
function StrToMime64(const AString: String): String;
...
function StrToMime64(const AString: String): String;
begin
  Result := TFormat_MIME64.Encode(AString);
end;
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.

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:
// 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;
Momentan tendier ich hier zur letzten Variante.

Wie ist es nun bei der Umkehrung

Delphi-Quellcode:
function Mime64ToStr(const AData: String): String;
...
function Mime64ToStr(const AData: String): String;
begin
  Result := TFormat_MIME64.Decode(AData);
end;
Welches ist hier die korrekte XE Variante:

Delphi-Quellcode:
// 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;
oder
Delphi-Quellcode:
function Mime64ToStr(const AData: String): String;
...
function Mime64ToStr(const AData: String): String;
begin
  Result := TFormat_MIME64.Decode(RawByteString(AData));
end;
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:
Delphi-Quellcode:
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;
Irgendwie bin ich bei diesen ganzen Stringvarianten nun ziemlich durcheinander gekommen.

Danke,
Uli
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz