-
Пробую перевести имеющийся проект на Delphi 10
Проект без GUI, по сути "вспомогательная" dll-ка одного большой проекта на С++
Напоролся на то, что вся дельфи теперь неотключаемо юникодная (дада, я пропустил всё это, читал только в общих словах).
Причем путь перейти полностью на юникод в программе - продумано, это видно.
Но мне нужен вариант остаться в Ansi-строках везде. и внезапно тут оказалось безумное количество траблов.
Буду признателен, если кто-нибудь сможет подсказать, как решить возникшие проблемы, оставив имеющийся проект на работе со строками из однобайтовых символов.
1. Как написать выражение конкатенации строк, чтобы всем было хорошо и дельфи не кидала предупреждения типа "Implicit string cast from AnsiString to String"
Код примерно такой:var
s1, s2: AnsiString;
...
s1 := ....откуда-то получили значение;
s2 := 'abc' + s1 + 'def';
2. В коде используется, например, TStringList из VCL
Но он теперь сплошь юникодный
Где бы взять неюникодный аналог TStringList? попробовал поискать - никакого TAnsiStringList не нашёл.
В интернете находятся рассказки про то, что нужно использоватьuses
Generics.Collections;
type
TStringMap<T: class> = TDictionary<ansiString, T>;
но это ж не смешно для имеющегося кода такое предлагать. -
Dimka Maslov © (10.01.18 13:34) [1]Совет:
1. Везде перейти на юникод и не заморачиваться.
2. Явное преобразование делать только при передаче/получении данных из других модулей. -
Вариант, понимаю.
Но такой подляны я от дельфи никак не ожидал.
Да и делать все эти конвертации туда-сюда - какой-то совершенно нездоровый путь. Проще на Lazarus перекомпилировать - там всё было много проще, судя по опыту 5-летней давности с пробами перехода для того же проекта.
Хорошо, что новую Дельфи сразу не купили, а на триале пробую.
Вообще-то цель - перекомпиляция имеющегося проекта Delphi на x64, другой цели нет. Может есть еще варианты, кроме Delphi 10 и Lazarus? я не нашел ничего другого (GNU-pascal еще, но совсем давно не развивается).
Деньги есть. -
Игорь Шевченко © (10.01.18 15:37) [3]Ответить себе и обществу на вопрос, в каком месте нужны неюникодные строки.
-
Беспощадный русскоязычный форум )
Игорь, повторюсь: есть огромная система, нифига не GUI-шная вообще (есть и GUI части в ней, но даже их переводить на юникод никто не собирается). Всё это на С++ в основном.
Перейти на юникод во всей системе - вообще нереально, да и надобности такой вообще не наблюдается, надо отметить.
Во всей этой огромной системе есть небольшой по объёму, но нужный чисто расчетный блок на Delphi. Ну так получилось. Которая (Delphi) внезапно захотела строго юникод в новой версии.
Я ответил на вопрос обществу? -
а новый компилятор понадобился лишь потому, что в той части, где используется указанная dll на дельфи, перестало хватать памяти на 32-битной версии. На диск нельзя, ибо критична скорость. Только ОЗУ. Отсюда логичен переход на 64-битную платформу, потому как лазить в больший объем ОЗУ костылями - устали, за и тормоза из-за этого, с которыми мириться уже не получается.
-
QAZ © (10.01.18 16:12) [6]
> Где бы взять неюникодный аналог TStringList
из старой делфи
s2 := ansistring('abc') + s1 + ansistring('def'); -
> Проще на Lazarus перекомпилировать - там всё было много
> проще, судя по опыту 5-летней давности с пробами перехода
> для того же проекта.
- если что - -dDisableUTF8RTL...