Как отключить unicode в Delphi xe2

Есть ли способ сделать это?

В настоящее время я использую 2007 год и хочу обновить, но очень разочаровываю, пытаясь заставить эту новую версию что-либо сделать.

Новое поведение char, строк и Pchar в xe2 убивает практически все приложения и сторонний компонент, которые я пробовал на нем.

Есть ли опция компилятора, которая обеспечивает совместимость с D2007.?

Ответ 1

Невозможно отключить UNICODE в Delphi XE2 (или любой другой версии, отличной от 2009), однако есть много ресурсов, которые могут помочь вам перенести ваше приложение:

Ответ 2

Если для Delphi 2009/2010/XE/XE2 (версии для юникода) был установлен "Ansi switch", вы просто обменивались бы проблемой, с которой вы сейчас сталкиваетесь, с гораздо худшими проблемами.

По этой причине не может быть переключателя. Эта идея была тщательно обсуждена, я знаю из первых рук разговоры с людьми, принявшими решение, и решение о разрыве кода не было предпринято без должной осмотрительности. Просто не было другого выхода. Чтобы сделать Delphi по-настоящему Unicode, для псевдонима String = UnicodeString было необходимо.

Следовательно, вы должны изменить все объявления String на AnsiString и Char на AnsiChar, если вы хотите иметь однобайтовые символы и типы строк, не относящиеся к юникоду, в вашем коде приложения. В большинстве ваших кодов и в большинстве мест это не обязательно. Но там, где вам явно нужна обработка размера байтов, например двоичные протоколы через RS232 и RS485, или двоичные форматы файлов (EDA и т.д.), Вам нужно изменить свой код.

Если вы не хотите самостоятельно переносить свой код, заплатите кому-то за это. Я поместил огромную библиотеку научных компонентов и приложений, и мне потребовалось несколько недель, чтобы проверить и найти все ошибки. Впоследствии у меня была разумная современная кодовая база, которая не сработала с 2009 года, когда я обновился.

Когда вы переходите к разделению XE/XE2, вы можете столкнуться с еще болью, связанной с вашими предположениями о том, что типы указателей имеют тот же размер, что и Integer или Cardinal, что больше не относится к Win64. Опять же, у ребят Delphi нет желания разорвать ваш код, они просто следуют здравым технологиям, в этом случае Win64 диктует определенные вещи.

Почему они не изменили каждое свойство управления VCL на USTRING вместо String? Почему они не сделали, чтобы каждая функция RTL выполняла как USTRING, так и STRING и обеспечивала перегрузки?

Потому что нормативная разработка Delphi теперь чисто Юникод. USTRING - это особый случай. String - это родной (нормативный) тип строки, и на самом деле он также известен как UnicodeString.

Так получилось, что вы уже использовали псевдоним типа. Строки в delphi 1.0 ограничены 255 символами. Когда они представили Delphi 2.0 и длинный строковый тип, внутренне называемый AnsiString, они написали существующий общий тип String как String=AnsiString. Когда мы добрались до Unicode, каждый компонент VCL и каждый метод VCL, который берет строку, по-прежнему принимает строку. Однако теперь String теперь String=UnicodeString.

Delphi 7 уже имеет WideString, например. Нам не нужен переход на юникод на полпути. Независимо от того, понимаете вы это или нет, весь мир разработки программного обеспечения теперь ожидает, что типы строк будут unicode. Delphi является частью глобального феномена. Интернет - это юникод. Ваша операционная система Windows 7 является чистым родным юникодом.