Ansistring wird in einigen DLLs verwendet um Daten von C++ , Matlab und Delphi auszutauschen
Und mit welchem Datentyp arbeiten diese DLLs unter Linux?
AnsiString setzt immer auch ein
Encoding voraus. Wenn man das nicht kennt, kann man die Bedeutung des Inhalts manchmal nur erraten.
Bei
AnsiString kann man die zu verwendende
CodePage angeben, wie z.B. hier:
Delphi-Quellcode:
const
cEBCDICCodePage = 1141;
type
EBCDICString = type AnsiString(cEBCDICCodePage);
Bei einer (auch impliziten) Zuweisung
string <->
AnsiString wird diese
CodePage für die Umwandlung verwendet. Damit werden dann Zuweisungen dieser Art vollkommen transparent vom Compiler erledigt:
Delphi-Quellcode:
var
myString:
string;
myEBCDIC: EBCDICString;
begin
myString := '
Hallo Welt';
// Unicode
myEBCDIC := myString;
// Unicode -> EBCDIC
myEBCDIC := '
Hallo Welt';
// Unicode -> EBCDIC
myString := myEBCDIC;
// EBCDIC -> Unicode
end;
Fehlt die Angabe einer
CodePage (z.B. bei Deklaration als
AnsiString) wird die aktuelle
CodePage von Windows genommen. Ohne Windows gibt es diesen Default aber nicht. Womöglich ein Grund für das Fehlen von
AnsiString bei diesen Compilern.
Sollten Umwandlungen nicht vorkommen (was eventuell gar nicht so einfach herauszufinden ist), kann vielleicht alternativ
RawByteString verwendet werden. In jedem Fall geht aber
TBytes und bei der Umwandlung dann
TEncoding verwenden.
RawByteString ist also nur für einen Teil der Anwendungsmöglichkeiten geeignet, während
TBytes immer geht. Daher würde ich
TBytes den Vorzug geben.