Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#20

AW: ANSISTRING unter Linux verfügbar ???

  Alt 14. Jun 2018, 12:41
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat