![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
CHERRY |
|
||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Доброго времени суток!
Есть не решаемые проблемы с ProgressCallback. Распаковка архива работает без проблем:
С архивацией проблемы:
Если закомментировать SetProgressCallback(nil, ProgressCallback);, архивация проходит нормально. Иначе все виснет намертво. Это глюки продукта или непонимание процесса. Версия продукта: (* 7-ZIP DELPHI API *) (* Unit owner : Henri Gourvest <[email protected]> *) (* V1.2 *) Оригинал прилагается. (********************************************************************************) Присоединённый файл ( Кол-во скачиваний: 184 ) ![]() --------------------
Трясу надежды ветвь, но где желанный плод? |
||||
|
|||||
CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Выяснилось, что ProgressCallback при архивации срабатывает для одного файла.
Вот рабочий пример:
Как то так. --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Все хорошо работает только для архивов 7z
OutArchive := CreateOutArchive(CLSID_CFormatZip); Спасибо за внимание. Добавлено через 1 минуту и 34 секунды Ошибочка, вот так CreateOutArchive(CLSID_CFormat7z) --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
barbee |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.6.2013 Репутация: 1 Всего: 1 |
Времени прошло немало, но всё же вопрос висит без ответа, а топик в гугле находится первым по запросу "sevenzip.pas setprogresscallback".
Так что напишу, как решить проблему, мало ли кто-то ещё столкнётся. Дело явно в кривой работе с потоками где-то на стыке VCL и 7z.dll. То ли распаковка там идёт не в том потоке, где нужно, то ли ещё что. В общем, расковыривать проблему до основания я не стал, благо решение быстро нашлось. Пример одного из вариантов решения приложен в комментариях прямо на странице проекта. Второй, на мой взгляд, несколько проще. Достаточно одного вызова, по документации устанавливающего количество рабочих потоков в 1.
И всё начинает работать как надо. Итого, код будет выглядеть так:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |