Конференция "KOL" » KOL и D2009
 
  • MTsv DN (30.03.09 16:52) [20]
    2 SPeller
    Слушай, а где у тебя косяки в 2009 вылазят? Я щас совершенно спокойно с UNICODE_CTRLS откомпилил свой проект...
  • D[u]fa (30.03.09 17:32) [21]
    SPeller, в КОЛе есть способ как в один инк засунуть и описание и реализацию.

    Вообще считаю что нет смысла разбивать на файлы КОЛВин, колфайлс.... и т.д. И плодить инки тоже не стоит, я бы наоборот большую часть инков убрал бы и внёс в сам КОЛ.пас.
  • Vladimir Kladov © (30.03.09 18:35) [22]
    И я бы внёс обратно, но вспоминаем ограничение на 64К строк. Дальше возникают проблемы с отладчиком в Delphi. Или речь об inc-ах в проекте MCK? Там тоже далеко не всё можно. Есть такие хитрые inc-файлы, которые изначально нужны для обмана Delphi IDE, чтобы он в дизайнере "думал", что имеет дело с классом VCL, и мог работать с формой. Если их засунуть в сам файл, Delphi скажет, что это не юнит с формой. Вообще, не знаю каким чудом удалось получить такой результат. Можно сказать, это - эксплоит в Delphi.
  • MTsv DN (30.03.09 18:38) [23]
    > Можно сказать, это - эксплоит в Delphi.
    8) +1
  • SPeller © (31.03.09 02:28) [24]

    > Я щас совершенно спокойно с UNICODE_CTRLS откомпилил свой
    > проект

    Я тожа откомпилил. Ты ворнинги посчитай, и посчитай места, где юникод в анси преобразуется. В таких местах текст, не соответствующий локали, превращается в вопросики. Кроме того, надо понимать, что при любом преобразовании компилятор, где может, вставляет соответствующие вызовы функций. А это не может играть в сторону снижения объема конечного бинарника и в сторону увеличения быстродействия.
  • SPeller © (31.03.09 02:29) [25]

    > в КОЛе есть способ как в один инк засунуть и описание и
    > реализацию

    {$IFNDEF func_impl}
    declaration
    {$ELSE}
    implementation
    {$ENDIF}

    ?
  • MTsv DN (31.03.09 10:05) [26]
    Все. Понял про что ты... В принципе, такие ворнинги должны были и других версиях быть. Просто не соответствие типов, типа Str2Extended получает AnsiString, а в функции используется CopyEnd c KOLString в параметре. При UNICODE_CTRLS, соответственно лажа. Несоответствие типов и возможность утери данных...

    Там работы "вагон и большая телега"...надо очень много править. Возможно пересмотреть политику использования A и W функций, чтобы доступ был к обоим вариантам, а по директиве выбирался нужный (если то необходимо)...
  • D[u]fa (31.03.09 11:53) [27]
    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, да я в курсе) причем со временем "эксплойт" получилось заточить под новые версии))

    Я просто высказывал то "что хотелось бы", но это не инструкция к действию
  • MTsv DN (01.04.09 09:49) [28]
    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. Первой строчкой пришлось дописать:
    {$define UNICODE_CTRLS}

  • MTsv DN (01.04.09 09:55) [29]
    Кстати, вот еще что. В свое время, для TDirList.ScanDirectory мной был предложен код проверки на unicode символы:
       {$IFDEF UNICODE_CTRLS} //+MtsVN in 2.58 / 14Apr2007
       IsUnicode := FindData.cFileName;
       if (IsUnicode <> '.') and (IsUnicode <> '..') then
       begin
        if pos('?', IsUnicode) > 0 then
            CopyMemory( @FindData.cFileName, @FindData.cAlternateFileName,
                        SizeOf(FindData.cAlternateFileName));
       end;
       {$ENDIF}


    не знаю почему сразу это не сделал, но для себя ввел еще дополнительно одну директиву. Сейчас код такой:
       {$IFDEF UNICODE_CTRLS} //+MtsVN in 2.58 / 14Apr2007
        {$IFDEF FORCE_ALTERNATEFILENAME}
       IsUnicode := FindData.cFileName;
       if (IsUnicode <> '.') and (IsUnicode <> '..') then
       begin
        if pos('?', IsUnicode) > 0 then
            CopyMemory( @FindData.cFileName, @FindData.cAlternateFileName,
                        SizeOf(FindData.cAlternateFileName));
       end;
        {$ENDIF}
       {$ENDIF}


    Чтобы пользователь сам мог выбирать с какими именами работать, благо оба варианта работают нормально...
  • SPeller © (01.04.09 13:38) [30]

    > Там работы "вагон и большая телега"...надо очень много править

    Ага. Я потихоньку для себя делаю )


    > чтобы доступ был к обоим вариантам, а по директиве выбирался
    > нужный (если то необходимо).

    Я тоже пришел к такому выводу относительно функций управления строками (strlen, strcmp и т.п.). А вот функции вроде Trim и Int2Str - это стопудово только KOLString.


    > D[u]fa   (31.03.09 11:53) [27]

    Я не смотрел, но так и подумал.


    > При использовании D2009 директива UNICODE_CTRLS, установленная
    > для проекта, !!!игнорируется!!! в KOL.PAS

    У меня не игнорировалась. Но я у себя для д2009 прописал принудительную установку этой директивы.
  • Vladimir Kladov © (01.04.09 16:00) [31]
    Игнорироваться символы могут, если их много. И в ранних Delphi была такая же фишка. Слишком короткий буфер на строку, остальное отбрасывается. Новые Delphi практически никогда не исправляют старые баги, только новых плодят.
  • SPeller © (01.04.09 17:10) [32]
    Ну вот, скомпилилось. 17408 размер, без системных замен, разумеется. Теперь баги вычесывать :)
  • SPeller © (01.04.09 17:34) [33]
    под Ini-файлы надо свой парсер писать. Хоть и используется WritePrivateProfileStringW, в файл пишется ansi.
  • MTsv DN (01.04.09 19:46) [34]
    2 SPeller
    Поделишься?
  • mdw (01.04.09 22:16) [35]

    > под Ini-файлы надо свой парсер писать. Хоть и используется
    > WritePrivateProfileStringW, в файл пишется ansi.

    Я для winCE делал аналог PIniFile. Вернее он "инклудится" в KOL.pas и заменяет родной. Основан на StrList. Правда работает именно как ANSI, но думаю поправить под WideString не сдожно будет.
  • mdw (01.04.09 22:18) [36]
    PS. Взять можно в KOL для Lazarus'a от Юрия Сидорова.
  • SPeller © (02.04.09 01:41) [37]
    Кстати, напомните, отчего нигде overload не используется в kol?


    > Поделишься?

    Попричесываю немного и поделюсь
  • SPeller © (02.04.09 01:53) [38]

    > без системных замен

    но с прописанным в uses переделанным variants.pas )
  • SPeller © (02.04.09 01:54) [39]
    блин, вот наврал-то... без вариантов
    :)
 
Конференция "KOL" » KOL и D2009
Есть новые Нет новых   [134431   +15][b:0][p:0.001]