-
2 SPeller Слушай, а где у тебя косяки в 2009 вылазят? Я щас совершенно спокойно с UNICODE_CTRLS откомпилил свой проект...
-
SPeller, в КОЛе есть способ как в один инк засунуть и описание и реализацию.
Вообще считаю что нет смысла разбивать на файлы КОЛВин, колфайлс.... и т.д. И плодить инки тоже не стоит, я бы наоборот большую часть инков убрал бы и внёс в сам КОЛ.пас.
-
И я бы внёс обратно, но вспоминаем ограничение на 64К строк. Дальше возникают проблемы с отладчиком в Delphi. Или речь об inc-ах в проекте MCK? Там тоже далеко не всё можно. Есть такие хитрые inc-файлы, которые изначально нужны для обмана Delphi IDE, чтобы он в дизайнере "думал", что имеет дело с классом VCL, и мог работать с формой. Если их засунуть в сам файл, Delphi скажет, что это не юнит с формой. Вообще, не знаю каким чудом удалось получить такой результат. Можно сказать, это - эксплоит в Delphi.
-
> Можно сказать, это - эксплоит в Delphi. 8) +1
-
> Я щас совершенно спокойно с UNICODE_CTRLS откомпилил свой > проект
Я тожа откомпилил. Ты ворнинги посчитай, и посчитай места, где юникод в анси преобразуется. В таких местах текст, не соответствующий локали, превращается в вопросики. Кроме того, надо понимать, что при любом преобразовании компилятор, где может, вставляет соответствующие вызовы функций. А это не может играть в сторону снижения объема конечного бинарника и в сторону увеличения быстродействия.
-
> в КОЛе есть способ как в один инк засунуть и описание и > реализацию
{$IFNDEF func_impl} declaration {$ELSE} implementation {$ENDIF}
?
-
Все. Понял про что ты... В принципе, такие ворнинги должны были и других версиях быть. Просто не соответствие типов, типа Str2Extended получает AnsiString, а в функции используется CopyEnd c KOLString в параметре. При UNICODE_CTRLS, соответственно лажа. Несоответствие типов и возможность утери данных...
Там работы "вагон и большая телега"...надо очень много править. Возможно пересмотреть политику использования A и W функций, чтобы доступ был к обоим вариантам, а по директиве выбирался нужный (если то необходимо)...
-
SPeller, смотри KOL_unicode.inc и как он подключен:
{$DEFINE interface_part} {$I KOL_unicode.inc} {$UNDEF interface_part}
.....
{$DEFINE implementation_part} {$I KOL_unicode.inc} {$UNDEF implementation_part}
Vladimir Kladov, да я в курсе) причем со временем "эксплойт" получилось заточить под новые версии))
Я просто высказывал то "что хотелось бы", но это не инструкция к действию
-
2 SpellerВ общем, самый простой вариант решения проблемы (компилятор перестает ругаться) такой. Сейчас:s : ansistring;
...
s := Trim( Copy( s, j, MaxInt ) ); Ошибка: [DCC Warning] KOL.pas(13942): W1057 Implicit string cast from 'AnsiString' to 'WideString'
[DCC Warning] KOL.pas(13942): W1058 Implicit string cast with potential data loss from 'WideString' to 'AnsiString' Правка:s := AnsiString(Trim( KOLString(Copy( s, j, MaxInt ) ))); Ошибок нет. Кстати, заметил вот еще какую фишку...не знаю, может это только у меня в проекте. При использовании D2009 директива UNICODE_CTRLS, установленная для проекта, !!!игнорируется!!! в KOL.PAS. Первой строчкой пришлось дописать:
-
Кстати, вот еще что. В свое время, для TDirList.ScanDirectory мной был предложен код проверки на unicode символы: IsUnicode := FindData.cFileName;
if (IsUnicode <> '.') and (IsUnicode <> '..') then
begin
if pos('?', IsUnicode) > 0 then
CopyMemory( @FindData.cFileName, @FindData.cAlternateFileName,
SizeOf(FindData.cAlternateFileName));
end;
не знаю почему сразу это не сделал, но для себя ввел еще дополнительно одну директиву. Сейчас код такой:
IsUnicode := FindData.cFileName;
if (IsUnicode <> '.') and (IsUnicode <> '..') then
begin
if pos('?', IsUnicode) > 0 then
CopyMemory( @FindData.cFileName, @FindData.cAlternateFileName,
SizeOf(FindData.cAlternateFileName));
end;
Чтобы пользователь сам мог выбирать с какими именами работать, благо оба варианта работают нормально...
-
> Там работы "вагон и большая телега"...надо очень много править
Ага. Я потихоньку для себя делаю )
> чтобы доступ был к обоим вариантам, а по директиве выбирался > нужный (если то необходимо).
Я тоже пришел к такому выводу относительно функций управления строками (strlen, strcmp и т.п.). А вот функции вроде Trim и Int2Str - это стопудово только KOLString.
> D[u]fa (31.03.09 11:53) [27]
Я не смотрел, но так и подумал.
> При использовании D2009 директива UNICODE_CTRLS, установленная > для проекта, !!!игнорируется!!! в KOL.PAS
У меня не игнорировалась. Но я у себя для д2009 прописал принудительную установку этой директивы.
-
Игнорироваться символы могут, если их много. И в ранних Delphi была такая же фишка. Слишком короткий буфер на строку, остальное отбрасывается. Новые Delphi практически никогда не исправляют старые баги, только новых плодят.
-
Ну вот, скомпилилось. 17408 размер, без системных замен, разумеется. Теперь баги вычесывать :)
-
под Ini-файлы надо свой парсер писать. Хоть и используется WritePrivateProfileStringW, в файл пишется ansi.
-
2 SPeller Поделишься?
-
> под Ini-файлы надо свой парсер писать. Хоть и используется > WritePrivateProfileStringW, в файл пишется ansi.
Я для winCE делал аналог PIniFile. Вернее он "инклудится" в KOL.pas и заменяет родной. Основан на StrList. Правда работает именно как ANSI, но думаю поправить под WideString не сдожно будет.
-
PS. Взять можно в KOL для Lazarus'a от Юрия Сидорова.
-
Кстати, напомните, отчего нигде overload не используется в kol?
> Поделишься?
Попричесываю немного и поделюсь
-
> без системных замен
но с прописанным в uses переделанным variants.pas )
-
блин, вот наврал-то... без вариантов :)
|