Hallo zusammen
In einer bestehenden Delphi-Applikation wird eine in VC++ geschriebene Console-Anwendung mittels 'CreateProcess' gestartet und dessen cout-Meldungen ber 'CreatePipe' abgefangen und in eimem TMemo angezeigt. Das klappte in D2007 und
ANSI-Text bis anhin ganz gut.
Nun habe ich die Aufgabe, die ganze Applikation
Unicode-fhig zu machen. D.h. die VC++ Console-Anwendung soll
Unicode-Meldungen an das Delphi-
GUI senden. Den Delphi-Teil habe ich bereits erfolgreich auf XE migriert. Zum testen der Pipe-Kommunikation habe ich ein einfaches C++ Consoleprogramm (
UNICODE) geschrieben, welches folgende
Unicode-Meldung (L =
Unicode string literal) ber wcout absetzt:
std::wcout << L"Using wcout: Кирилица ǽлљΣča" << std::endl;
In einer DOS-Konsole (cmd mit Lucida
Unicode Font) wird die Meldung korrekt dargestellt. Ebenso wenn ich den Output mit >> in eine Datei umleite.
Wird das Programm aber von Delphi aus gestartet, empfange ich nicht die gewnschten Daten! Wenn ich die empfangenen Daten als buffer of Char (WideChar in XE) behandle, erhalte ich:
獕湩捷畯㩴퀠킚톸킀킸킻톸킆₰ꣃ꧃룃黃뷇믐駑ꏎꛃ跄ൡ
Wenn ich die Pipedaten in einen AnsiChar buffer einlese, erhalte ich:
Using wcout: Кирилица èéøÞǽлљΣæča
D.h. zumindest die Chars < 128 werden richtig interpretiert (was auf eine UTF-8 Kodierung hindeutet).
Wenn ich die anderen Zeichen als Doppel-Byte interpretiere, erhalte ich Werte im Bereich von $C300-$D1FF welche im chinesischen Bereich von
Unicode liegen - sollten aber im kyrillischen Bereich um $0400 liegen.
Um das Problem einzugrenzen, habe ich versucht, eine Delphi XE-Konsoleanwendung zu erstellen. Diese ist aber mit WriteLn nicht
Unicode-fhig.
Hat jemand einen Hinweis oder eine Idee dazu?
Besten Dank,
Nobby