![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Delphi programs in API.
На английском. Очень подробно всё описано, плюс есть исходные коды готовых юнитов. Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял). |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Вчерась ковырял одну игрушку, где данные были упакованы deflate. Как и всегда использовал puff.c + puff.h из zlib. Внезапно, при распаковке, получаю ошибку записи в память по адресу 0, программа падает. Почесав затылок извлекаю сжатый файл отдельно и делаю тестовую программку, где ничего кроме распаковки нет - не помогло. Тогда беру предыдущую (благо сохранилась - я, кстати, понял что после выхода новой версии программы, старые лучше не удалять - можно потом будет об этом сильно пожалеть) и компилирую с ней - всё работает! Написал письмо в zlib - мне товарищ Mark Adler выслал сегодня патч - применил его на последнюю версию и всё снова заработало.
Т.к. этот баг появляется редко (я уже пару программ с последней версией puff сделал и упало только здесь и то на 1 файле), то, скорее всего, обновлять файлы на сайте zlib.net будут не скоро. К тому же это не основной пакет, а дополнительный. Так что привожу инструкцию по самостоятельному патчу файла "puff.c" version 2.1, 4 Apr 2010: 1) Скачиваем Binaries Zip, распаковываем и ищем там файл "patch.exe". 2) Кидаем к нему в каталог файл "puff.c", который мы хотим пропатчить. 3) Создаём в том же каталоге текстовый файл "puff.diff" такого содержания: CODE --- ../../../zlib-1.2.5/contrib/puff/puff.c 2010-04-04 11:23:58.000000000 -0700 +++ puff.c 2010-04-25 02:04:16.000000000 -0700 @@ -525,6 +544,12 @@ int symbol; short lengths[FIXLCODES]; + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + /* literal/length table */ for (symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; @@ -541,12 +566,6 @@ lengths[symbol] = 5; construct(&distcode, lengths, MAXDCODES); - /* construct lencode and distcode */ - lencode.count = lencnt; - lencode.symbol = lensym; - distcode.count = distcnt; - distcode.symbol = distsym; - /* do this just once */ virgin = 0; } 4) Запускаем: patch.exe -o puff2.c puff.c puff.diff 5) Получаем исправленный файл в "puff2.c". |
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 21:15 |