Sergei I. Gorelkin писал(а):Компилятор скорее соберется, чем нет, а вот rtl - есть сомнения... там такой бардак творится... Короче, надо пробовать.
Компилятор без rtl не соберется
Все собралось на ура, зависимость от oleaut32.dll осталась, но дизассемблирование показало, что работа с WideString идет так же как и с AnsiString.
Интересный факт: стало подругому работать преобразование AnsiString <> WideString - какая-то путаница с кодировкой. Интересно то, что обычно если исходник написан в cp1251 и пытаться делать writeln('Привет мир') - то на консоли будут кракозябры (т.к. используется досовская кодировка), а если сделать перенаправление вывода в файл, то в файле будет текст в исходной кодировке cp1251. После того, как закоментировал tf_winlikewidestring, вывод на консоль и в файл дают одинаковые кракозябры.
Ладно, надежность-стабильность важнее производительности
Добавлено:
Кракозябры одинаковые, т.к. все они из первой половины кодовой таблицы...
Добавлено:
Вчера обновлялся из svn, похоже кракозябры от туда, т.к. нормальная версия дала тот же результат, может теперь как в Linux нужно подключать отдельно WidestringManager?.. вечером буду разбираться...
Добавлено:
Нет, такое поведение еще и в 2.0.4
Никогда с таким не сталкивался, т.к. никогда не определял WideString констант с русским текстом.
- Код: Выделить всё
procedure test_ansi(S: AnsiString);
begin
writeln(S);
end;
procedure test_wide(S: WideString);
begin
test_ansi(s);
end;
const
S: WideString = 'Привет мир';
begin
test_wide(S);
writeln('Привет мир');
end.
Посмотрел как константа опредяется:
- Код: Выделить всё
_$PROGRAM$_Ld1:
DW 207,240,232,226,229,242,32,236,232,240,0
т.е. считай тот же ansi (только первые 256 символов)