Можно ли отключить поддержку Unicode в RAD Studio 2009? - PullRequest
2 голосов
/ 17 декабря 2008

У меня небольшие проблемы с RAD Studio 2009.
Как вы знаете, в MSVS можно отключить поддержку Unicode (щелкните правой кнопкой мыши решение-> свойства-> набор символов = не установлено). Мне нужно найти эту функцию в RAD Studio, я знаю, что она существует, но не знаю, где именно.
Это единственное, что останавливает мою работу над университетским проектом Socket Chat.
Постскриптум Проблема появилась после того, как я установил обновление с официального сайта CodeGear.

Ответы [ 7 ]

12 голосов
/ 18 декабря 2008

Краткий ответ: нет, в RAD Studio 2009 такой функции для отключения Unicode нет.

3 голосов
/ 13 февраля 2009

chester - Вам не нужно напрямую вызывать WideCharToMultiByte (). Пусть RTL сделает всю работу за вас:

AnsiString s = Form2->Edit1->Text;
MessageBoxA(NULL, s.c_str(), "It`s ok", MB_OK);
3 голосов
/ 13 февраля 2009

Вы должны быть осторожны, используя метод UnicodeString :: t_str (). Если вы вызываете его в проекте, который скомпилирован для Ansi, а не Unicode, t_str () изменяет внутреннее содержимое UnicodeString. Это может иметь неожиданные побочные эффекты, особенно для значений UnicodeString, которые поступают из элементов управления.

1 голос
/ 19 апреля 2010

Есть лучший способ, я делаю это так:

MessageBox(NULL, Form2->Edit1->Text.w_str(), L"It`s ok", MB_OK);
1 голос
/ 13 января 2009

Если быть точным, вы можете заставить ваше приложение C ++ Builder быть построенным без определения флага #UNICODE, изменив параметры проекта для «TCHAR maps to char».

Это означает, что SendMessage будет вызывать SendMessageA и т. Д., А TCHAR

Однако, если вы используете какие-либо функции VCL, для них нет неуникодных эквивалентов. VCL теперь наследуется по Юникоду, и это НЕ МОЖЕТ быть изменено.

Re: ваше «решение» - есть более простой способ. который работает как с TCHAR = char, так и с wchar_t:

MessageBox(NULL, Form2->Edit1->Text.t_str(), _TEXT("It`s ok"), MB_OK);
1 голос
/ 04 января 2009

Можно ли его отключить? Лучший вопрос: стоит ли его выключать? И ответ: НЕТ.

Это далеко не так, чтобы спроектировать приложение так, чтобы символы Юникода отправлялись правильно при сериализации (например, в сокетах в вашем приложении), чем проектировать не-Unicode программу в мире Юникода. Даже для простого проекта стоит изучить Unicode в принципе.

0 голосов
/ 18 декабря 2008

Я решил проблему следующим образом:


    wchar_t* str = Form2->Edit1->Text.w_str();
    char* mystr = new char [Form2->Edit1->Text.Length() + 1];
    WideCharToMultiByte(CP_ACP, 0, str, -1, mystr, Form2->Edit1->Text.Length() + 1, NULL, NULL);
    MessageBox(NULL, mystr, "It`s ok", MB_OK);
    delete []mystr;

но мне кажется, что есть другой способ

...