Wir stellen gerade einige Projekte vom alten Borland C++ Builder 6 auf Embarcadero C++ Builder XE um.
Borland entwickelte anfangs den C++ Builder, anschließend übernahm das CodeGear und nun Embarcadero. Die neue Entwicklungsumgebung unterstützt nun Unicode.
Es gibt zwar die Möglichkeit bestehende Projekte(Endung .bpr) zu konvertieren, bis jetzt habe ich aber die Erfahrung gemacht, dass es gerade bei kleineren Programmen einfach er ist das Projekt neu zu erstellen.
In den Projekteinstellungen kann festgelegt werden ob für C-Strings der Datentyp char oder wchar_t gilt. Allerdings muss beachtet werden dass alle VCL Komponenten für die Speicherung von Text die Klasse UnicodeString verwenden.
Das konvertieren eines Projektes ist mit dem lösen aller Warnings noch lange nicht fertig. Manche Fehler fallen erst spät auf, wie ich heute feststellte.
In einem Programm tat ich etwas ähnliches wies das:
AnsiString s;
s.printf("Caption: %s", form1->Caption );
Allerdings an einer heikleren Stelle. Natürlich kam keine Fehlermeldung oder Warnung, erst zur Lauftzeit (nach 2 Tagen in Produktion) wurde bekannt dass das Programm nicht korrekt funkionierte.
Bis ich auf die entsprechende Stelle stieß dauerte ein bisschen. Da form1 vom Typ TForm ist, also eine VCL Komponente, wird die Eigenschaft Caption als UnicodeString gespeichert. Die Methode sprintf() vom Typ AnsiString kann damit nicht umgeben, deshalb sollte man die Eigenschaft zuerst casten.
s.printf("Caption: %s", (AnsiString)form1->Caption );
Warum ich AnsiString überhaupt benutze? Nun ja, in diesem Projekt werden oft Ansi C Funktionen aufgerufen die noch mit dem Datentyp char arbeiten. Und ansiStringObjekt.c_str() gibt mir einen char array zurück.
Bis jetzt ist das upgrade auf C++ Buider XE mit mehr Arbeit als nutzen verbunden. Aber das wird hoffentlich nur so lange der Fall sein, bis alle Projekte umgestellt sind.