Zakładając, że AnsiString faktycznie nim jest, i że przyjmuje w konstruktorze UnicodeString'a, takie coś powinno przejść, niezależnie od trybu kompilacji:
We wcześniejszych wersjach środowiska zawsze domyślnie stosowany był typ AnsiString, zadeklarowanie zmiennej typu String odnosiło się do AnsiString. W nowszych wersjach
(sprawdzałem, więc wiem) domyślnie stosowany jest typ UniceodeString i np. zadeklarowanie typu String odnosi się już nie do AnsiString lecz do UnicodeSring.
Przy tamim zapisie:
- Kod: Zaznacz cały
FormManu->Lan[i].setName(AnsiString(EName->Text).c_str());
w środowiskach C++Builder 2009 i 2010 dokonujesz najpierw konwersji UnicodeString, gdyż właściwość Text obiektu typu TEdit jest typu UnicodeString, a potem dokonujesz konwersji na char. To oczywiście zadziała, lecz mamy tutaj podwójną konwersję.
Testowałem metodę
t_str() w odniesieniu do różnych przypadków i nie pojawił mi się żaden błąd konwersji.
Można zmienić sposób mapowania TCHAR w menu:
Project > Options > Directories and Conditionals w tabeli po prawej stronie wybieramy wiersz
_TCHAR map to i zamiast wartości
char ustawiamy tam
wchar_t. Po tej zmianie wszystkie funkcje, metody itp. zamiast wartości typu
char będą oczekiwały wartości typu
wchar_t, ale to tylko bardziej komplikuje sytuację.