[wlx] HTMLView - обсуждение

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

В D2 тоже (во всяком случае, Гислер не раз говорил о собственных модификациях стандартных модулей), поэтому думаю именно на компилятор.

Короче, я не знаю, в чём проблема, решается ли она, если решается — то как именно, и почему Гислер это решение не может применить. Все вопросы и советы к нему, гадать на кофейной гуще тут бессмысленно. Пока что факты таковы, что в Тотале эта проблема имеется.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Понятно, я знал что Г. про set8087cw знает. :)
Про нее все знают. А какое отношение к этому имеет D3D..
Аватара пользователя
arax
Сообщения: 260
Зарегистрирован: Чт янв 20, 2011 10:00
Откуда: Новгород

Сообщение arax »

Похоже без бинарного патча здесь не обойтись, для примеру в архиве две версии тотала одна оригинальная, а в другой отключены все исключения сопроцессора и плагин который вызывает деление на ноль. В оригинальной версии выскакивает ошибка, а в модифицированном все работает. Для проверки достаточно нажать f3 на любом файле остальное уже настроено. Конечно патчить exe это не дело, лучше пропатчить delphi runtime и послать автору. В Lazarus все тоже самое, по крайней мере если смотреть последнюю бету то там исключения сопроцессора тоже включены, патчить не стал т.к у тотала есть контроль целостности exe, а для 8 версии x64 готового способа его отключить под рукой нет.


http://rghost.net/private/27013491/a1ae ... 29ea73dbde
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Alextp писал(а):А какое отношение к этому имеет D3D..
Сам хотел бы знать. Судя по стеку, движок MSHTML через неё работает, но нафига — ума не приложу.

arax
Так проблема как раз в 64-битной версии и возникает, в 32-битной не проявляется. :)

М-да, перечитал сейчас ветку, понял, что всё запутал. Тут речь шла одновременно о двух вещах: об исторической проблеме в Дельфях и о текущей проблеме в Лазарусе. Все мои слова о проблематичных отключениях относились к Дельфи. Гислер долго воевал с этой пакостью, и только в 7.50, кажется, поотключал нужные опции в основных местах, так что теперь подобных падений намного меньше. А с HTMLView падает уже 64-битка, сделанная в Лазарусе. Я предположил, что это схожая проблема. Хоть Гислер утверждает, что Лазарус ей не подвержен, но раз на практике наблюдаем иное…

Остаётся дождаться от Гислера тестовой версии, где вставлен вызов отрубания исключений перед нужным DispatchMessage, проверю — станет ясно, в нём причина или нет. Заодно тогда и спрошу у него, почему вообще так происходит, раз Лазарус не должен страдать этой проблемой.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Гислер ответил мне, что он попробовал вставить вызовы ClearX87ControlWord перед каждым DispatchMessage, но это не помогло. Исключение всё-таки выскакивает, хотя отладчик Лазаруса делает невинные глазки и показывает, что этот класс исключений замаскирован (причём даже на момент возникновения самого исключения).

Собственно падение происходит при обработке нестандартного сообщения с кодом 0x8002; насколько удалось нагуглить, это какое-то сообщение, специфичное для контрола (все коды сообщений выше 8000 используются для личных целей приложений). Единственное предположение, что событие происходит в другом потоке, т.к. маска выставляется для каждого потока независимо, но это я ещё проверю на отладке. А пока ни у него, ни у меня идей больше нет. :(
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
arax
Сообщения: 260
Зарегистрирован: Чт янв 20, 2011 10:00
Откуда: Новгород

Сообщение arax »

CaptainFlint писал(а):А пока ни у него, ни у меня идей больше нет.
Заменить
\lazarus\fpc\2.4.4\units\x86_64-win64\rtl\system.o
содержимым архива
http://rghost.net/27283781
и пересобрать тотал

Это пропатченный runtime от fpc 2.4.4, если используется другая версия компилятора то нужно сказать мне ее.

В этой версии по умолчанию отключены все исключения сопроцессора и sse, кстати именно из за последнего и могла быть проблема так как они маскируются не так как исключения сопроцессора.

В тестовом приложении у меня с этой версией никаких исключений не возникает.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

arax
Спасибо за наводку, дело оказалось в том, что это именно SSE-исключение, Гислер его просто не маскировал. И ведь хотел я сразу же посмотреть, к какой категории относится инструкция, но вылетело из головы. В общем, Гислер попробовал замаскировать SSE-исключения в самом начале программы, и всё заработало; патч не потребовался. Исправление войдёт в следующую бету.

Кстати, возникает вопрос, как лучше поступать с обычными исключениями плавающей точки. Сейчас Гислер их выключает перед каждым вызовом OLE-функций и включает после них. Можно их тоже выключить в самом начале раз и навсегда, но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
arax
Сообщения: 260
Зарегистрирован: Чт янв 20, 2011 10:00
Откуда: Новгород

Сообщение arax »

CaptainFlint писал(а):но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами
А зачем это вообще нужно?
Я еще понимаю на этапе отладки, но использовать нестандартный подход к исключениям в приложении которое задействует внешние библиотеки, исключения сопроцессора в большинстве случаев не обрабатывающие, нельзя.
А попытка исправить это вставляя отключение исключений перед каждым вызовом усложнит код, к тому же какая гарантия что учтены все места где это нужно.

Кстати неплохо было бы разобраться и с 32 битной версией, в ней все эти проблемы тоже присутствуют.

Предположим у нас есть testdll.dll исходников которой нет, о исключениях она ничего не знает и которую мы хотим использовать в плагине.

В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку.


Вот пример
http://rghost.net/27359661
Открываем lister и при попытке изменить размер окна он вылетает по Invalid Floating Point Operation, исходники модулей на purebasic в комплекте.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

arax писал(а):А зачем это вообще нужно?
Например, ловить случайные баги в Тотале. Например, из-за неправильной обработки у тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение. Он зарепортит — Гислер поправит, все выиграют.
arax писал(а):В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку.
Не уверен, что он захочет для исправления такого рода проблем использовать патченый компилятор и/или System… А другого способа я не вижу.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
arax
Сообщения: 260
Зарегистрирован: Чт янв 20, 2011 10:00
Откуда: Новгород

Сообщение arax »

CaptainFlint
Сильно сомнительно что тотал широко использует вычисления с плавающей точкой(а он их вообще использует?).
у тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение.
Тут скорее, у тысяч пользователей будут выскакивать исключения во внешних модулях при использовании плагинов, а Гислер
не
захочет для исправления такого рода проблем использовать патченый компилятор и/или System…
Учитывая что для этого нужно только поправить одну константу (0x1332->0x133f), это крайне печально.
dikinsonik
Сообщения: 13
Зарегистрирован: Вт авг 22, 2006 00:28

Сообщение dikinsonik »

Подскажите,реально сделать в TC, открывать браузер IE9,нажал кнопку - и браузер открылся на ширину двух панелей - для работы в нете...
Что бы было вот так вот

Изображение
Аватара пользователя
Моторокер
Сообщения: 1517
Зарегистрирован: Пт май 06, 2005 08:22
Откуда: г. Пермь (читается Перьмь)
Контактная информация:

Сообщение Моторокер »

В чём прикол? Почему нельзя на весь экран развернуть?
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Читаем здесь. Прикол в допиливании плагина до уровня лёгкого браузера (с адресной строкой, тулбаром (не только в режиме оконного просмотра), строкой состояния).
И написано "нажал кнопку". А это как минимум можно сделать только с помощью внешней тулзы типа TCFS2 или скрипта.
Аватара пользователя
fa1con
Сообщения: 162
Зарегистрирован: Сб авг 19, 2006 00:33

Сообщение fa1con »

На сайте автора появилась версия 1.2.6:
http://sites.google.com/site/htmlview/

Теперь доступна 64-битная сборка. Также добавлена функция подсветки всех найденных строк при поиске (отключено по-умолчанию, включается ключом HighlightAllMatches).

Автоматическая установка перезаписывает ini-файл, будьте внимательны.
Аватара пользователя
Mellomann
Сообщения: 709
Зарегистрирован: Пн сен 07, 2009 00:44

Сообщение Mellomann »

Багрепорт!

При попытке просмотреть листером данный файл
http://rghost.ru/41419381 (обычный mht, подобных можно насохранять ие или оперой)
вываливается вот такая ошибка
Изображение

TC 8.01 x64 @ Win8 x64.

p.s.
При прочих равных на Win7 х64 всё работает нормально.
Ответить