flint2 писал(а):
Полёт нормальный.nesco писал(а):
Я же просто пример привел, а не полные исправления кодаСм. предыдущий пост.
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
flint2 писал(а): Полёт нормальный.nesco писал(а): Я же просто пример привел, а не полные исправления кодаСм. предыдущий пост. |
|||
карма: 22 |
|
Ответов: 2059
Рейтинг: 132
|
|||
nesco писал(а): Я же просто пример привел, а не полные исправления кодаЭто понятно. Я перепутал fn и Ex - дало ошибку. Потом отвлёкся и вернул старую строку по ошибке или рассеянности. Спасибо. |
|||
карма: 6 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
flint2 писал(а): Я перепутал fn и Ex - Потом отвлёкся и вернул старую строку по ошибке или рассеянности.Ну и че, валится или не валится, и как работает? |
|||
карма: 22 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Так я докладывал.
flint2 писал(а): Каюсь - грешен.Всё работает. Всё работает, как надо! |
|||
карма: 6 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
flint2 писал(а): Всё работает, как надо!Это уже хорошо, но мне все же интересно, что скажет начальник транспортного цеха. |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
nesco писал(а): Galkov, а почему
Потому-что PChar -- это вам не баб щупать Это хитрая функция, которая гарантирует НЕ НОЛЬ. Если строка пустая (fn=nil), то она спецом возвращает реальный адрес на константную пустую строку (на нулик, грубо говоря). ------------ Дoбавленo в 17.56: Пока вы тут думаете, я немного соптимизировал код (см. аттач) Абсолютно тот же функционал (просто "ногами" запихал multiCmp унутрь OutFiles) Вопросы лишней верхней точки точки, doExt, опциональность регистровой независимости сравнений -- я не обсуждаю, как Вы заметили, наверное. Несложные и непринципиальные вопросы. nesco, решай сам про все эти "хотелки". В смысле: мне более, или менее -- все равно. |
|||
карма: 9 |
| ||
файлы: 1 | hifilesearch_new2.rar [1.8KB] [313] |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Galkov писал(а): Это хитрая функция, которая гарантирует НЕ НОЛЬ.То-то она нагарантировала, что валится при пустой строке. Вот, пожалуйста, нажми кнопку и увидишь, если нам не веришь
и сравни вот с этим кодом
А вот теперь объясни -- почему при пустой строке PChar(st) валится, а @st[1] не валится? |
|||
карма: 22 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Galkov писал(а): Если строка пустая (fn=nil), то она спецом возвращает реальный адрес на константную пустую строку (на нулик, грубо говоря).Мудрёно наплёл, но доходчиво. Пока вы тут думаете, я немного соптимизировал код (см. аттач) Завтра, завтра, не сегодня - так лентяи говорят. [flood] Домашние хлопоты - обед-ужин на две персоны, брюки перешить. - Сын худеет на турнике. Я только 18, а он 210 при весе 85. + пиво + уже, и когда пенсия будет(Обычно Лужковские приходили в это время)? - Наверное Греф, Герман Оскарович прокручивает... [/flood] nesco, решай сам про все эти "хотелки". В смысле: мне более, или менее -- все равно. По большому счёту всем аналогично, но как тусовать Files,Dirs и All будут те, у кого отвёртки нет. Или метода воспитания такая? |
|||
карма: 6 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
flint2 писал(а): Завтра, завтра не сегодня - так лентяи говорятПриготовься к тому, что при пустом Ext оно у тебя свалится |
|||
карма: 22 |
|
Ответов: 2059
Рейтинг: 132
|
|||
nesco, я уже просёк.
[flood] На самом деле, я не такой глупый, как кажется, а значительно гораздей. [/flood] flint2 писал(а): nesco, я уже просёк. Будем посмотреть. |
|||
карма: 6 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Все, nesco -- разобрался блин. И сделал маленькое открытие, упрощающее наши коды.
1) Почему не падает @fn[1]. Вообще-то, это тип pchar, который, для пустой строки fn - тупо равен нулю (проверил отладочными выводами). Если им пользоваться как указателем на символ - упадет сразу. В твоем коде это передается в _hi_onEvent, а Дельфи сначала переводит это дело в строку с помощью LStrFromPChar. А там есть "страховочка" против нулевого указателя. Она возвращает пустую строку. Потому и не падает. В ком еще есть "страховочка", а в ком ее нет -- тайна сия велика есть. 2) Почему падает CharLower. Потому что мягкотелые - говнюки. Оказывается, привести к нижнему регистру пустую строку - неразрешимая задача. Это мой прокол, ибо такой гадости я от них не ожидал. НО, они подстелили соломку для лохов. Если указатель на строку "почти нулевой" (hword=0), то они считают его не указателем, а символом, который приводят к нижнему регистру и его и возвращают. Т.е., если ты лоханулся, и влепил нулевой указатель, то они посчитают его нулевым символом, приведут его к нижнему регистру, и ноль же и вернут. Неправильными действиями получаем правильный результат, потому что кто-то специально рассчитал, что ты будешь действовать неправильно. Дурдом на каникулах, но я в этом не виноват. 3) Маленькое открытие. Дельфи, в тот момент, когда ты где-то запомнил указатель на символ строки, начинает подозревать тебя в том, что ты будешь менять содержимое строки, и АВТОМАТИЧЕСКИ выполняет UniqueString, без нашего участия. Если и мы это делаем, то это делается два раза (буквально подряд). Вот такой он парень, этот Дельфи. Если мы получаем указатель на символы с помощью PChar(fn) -- то он нас ни в чем плохом не подозревает. А если тот же самый указатель с помощью @fn[1] -- сразу же влепляет UniqueString. 4) Вывод. Надо делать CharLower(@st[1]) с последующим автоматическим преобразованием его в string, и забыть про UniqueString (он сам про него вспомнит). Обновил этот аттач по вышеуказанным причинам. ------------ Дoбавленo в 00.22: nesco писал(а): То-то она нагарантировала
|
|||
карма: 9 |
| ||
Голосовали: | flint2 |
Ответов: 2059
Рейтинг: 132
|
|||
Galkov писал(а): 1)... 2)... 3)... Дурдом на каникулах, но я в этом не виноват.) Гигант мысли, отец русской демократии! Если указатель на строку "почти нулевой" (hword=0), то они считают его не указателем, а символом, который приводят к нижнему регистру и его и возвращают. Есть такое дело! asm { -> EAX pointer to str } { <- EAX pointer to PChar } Крутой отладчик. и АВТОМАТИЧЕСКИ выполняет UniqueString, Было такое подозрение и у меня. Хотел всё это дело прокомментировать, но не нашел слов. Вот, что я Вам скажу профессор - Нобелевку Вам давно пора! |
|||
карма: 6 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Хм.. Поправочка:
Galkov писал(а): Вот такой он парень, этот ДельфиПоэтому пришлось вернуть {$ifdef F_P}UniqueString(Ex);{$endif} перед применением CharLower См. тот же аттач |
|||
карма: 9 |
|
Ответов: 2059
Рейтинг: 132
|
|||
-- а вот FPC уже не такой крутой парень. Delphi7 - тоже иначе себя ведёт. Delphi, FPC, Delphi7 - Всё ОК! |
|||
карма: 6 |
|
Ответов: 9906
Рейтинг: 351
|
|||
flint2, может мы дождемся реальных дел, а не "много буков"
Проверять последнее исправление надо на выдачу на выход оригинальных имен, если они отличаются от приведенных к нижнему регистру Вот здесь:
А в аттаче я вижу пока 0 закачек, но сообщение, что все круто. |
|||
карма: 9 |
|