Problem pojawił się gdy odinstalowałem C++ i zainstalowałem ponownie, a przed reinstalacją wszystko było w porządku!
Nie mogło być w porządku. C++Builder 2009 i 2010 operuje domyślnie na zmiennych typu UnicodeString i wchar_t a nie jak we wcześniejszych wersjach na AnsiString i char, więc konwersja stosowana do AnsiString nie zadziała w nowszych wersjach. Do konwersji UnicodeString do wchar_t należy użyć
w_str(), a nie c_str(), a do konwersji char do wchar_t należy użyć
LW C++Builder 2007 i starszych Appllication->MessageBox oczekiwało argumentów typu:
- Kod: Zaznacz cały
Application->MessageBox( const char *Text, const char *Caption, int Flags);
W C++Builder 2009 i 2010 oczekuje argumentów typu:
- Kod: Zaznacz cały
Application->MessageBox( const wchar_t *Text, const wchar_t *Caption, int Flags);
W C++Buider 2007 i starszych ten ten komunikat mógł wyglądać tak:
- Kod: Zaznacz cały
Application->MessageBox( ("Tekst" + Edit1->Text).c_str(), "Komunikat", MB_OK | MB_ICONSTOP);
ale w C++Builder 2009 i 2010 musi dokonać konwersji na wchar_t:
- Kod: Zaznacz cały
Application->MessageBox( ("Tekst" + Edit1->Text).w_str(), L"Komunikat", MB_OK | MB_ICONSTOP);
To dotyczy nie tylko tego komunikatu. Musisz nauczyć się konwersji z jednych typów na inne, gdyż nie jest to już tak proste jak we wcześniejszych wersjach. Musisz wiedzieć jakiego typu używasz i jakiego oczekują funkcje.
Domyślnie środowisko będzie w większości funkcji, używać typu char, ale nie zawsze. Zawsze będzie jednak używać typu UnicodeString zamiast AnsiString.
Można zmienić domyślne używanie typu char na wchar_t w opcjach projektu.
Menu:
Project
Options - sekcja:
Direcotries and Conditionalsw tabelce po prawej stronie odszukaj pozycję:
_CHAR i zmień char na
wchar_t.
options.png
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.