| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > qCompress как распаковать? |
| Автор: Mr_Devil 18.3.2012, 03:41 | ||||
Есть приложение, которое экспортирует свои данные в XML-файл, но предварительно сжимает его:
Распаковывает она все это дело обратно таким образом:
Каким образом можно самостоятельно распаковать файл не имея фреймворка Qt? Архиваторы его не распознают, видимо, не хватает заголовков. В папке с программой есть библиотека QtCore4.dll v4.7, в ней есть функции compress и uncompress. Попытки воспользоваться этими функциями на Delphi пока ни к чему не привели, т.к. реализации класса QByteArray в Delphi нет. Подскажите, пожалуйста, как можно решить проблему? Может есть другие библиотеки с заголовками для Delphi, которые можно использовать? З.Ы.: C++ не владею, фреймворка нет. |
| Автор: borisbn 18.3.2012, 10:06 | ||||||
Делаешь dll-ку на Си++, использующую Qt и экспортирующую 2 функции
Первая будет делать следующее
Вторая:
Как в дельфи подключить обычную dll-ку и импортировать оттуда функции не знаю, но, думаю, это - несложно |
| Автор: borisbn 18.3.2012, 10:21 |
ага. единственно что - они добавляют к данным 4 байта - размер распакованных данных. если их отрезать, то можно пользоваться zlib-ом. я уже так делал. работатет |
| Автор: Sahab 18.3.2012, 12:25 |
зочем? |
| Автор: borisbn 18.3.2012, 13:43 |
наверное, чтобы при распаковке заранее знать размер данных |
| Автор: Mr_Devil 18.3.2012, 23:47 | ||||||||||||
Идея хорошая, но даже если я найду компилятор, у меня нет самого фреймворка, где объявлены все эти классы и функции (QByteArray, qUncompress). К тому же в C++ я, можно сказать, мало что понимаю
Не сложно, я хотел использовать напрямую библиотеку QtCore4.dll, но не знаю какие параметры передавать, в каком порядке и каких типов. Может быть можно что-то к этому архиву дописать, чтобы можно было открыть каким-нибудь архиватором?
Не совсем понял что там написано. Это реализация qUncompress? В исходном тексте (в моем первом сообщении) передается только 1 параметр. Почему там 2 параметра и чем это может помочь? Предлагаете самостоятельно сделать реализацию всех используемых классов на Делфи?
Есть где почитать, что им можно передавать и как забирать?
Если воспользоваться zlib'ом, можно будет извлечь данные, не зная исходного размера? |
| Автор: borisbn 19.3.2012, 08:47 | ||
http://zlib.net/manual.html
можно. отрезаешь первые 4 байта и отдаёшь остаток в ф-цию распаковки zlib'а. единственное что - при смене библиотеки Qt они могут сменить формат и такой рукоблудный qUncompress работать не будет. так что лучше воспользуйся способом из моего первого сообщения |
| Автор: Mr_Devil 19.3.2012, 16:31 | ||||||
Спасибо за помощь, все получилось. Отрезал 4 байта и распаковал ZLib'ом. Библиотека Qt не поменяется, т.к. приложение я обновлять не собираюсь, мне нужно было только разобрать его формат экспорта, чтобы слепить для него файл импорта со своими данными. Теперь с библиотекой ZLib автоматически решился второй вопрос "Чем запаковать обратно?" Скомпилированную библитеку ZLib взял http://www.winimage.com/zLibDll/index.html. Это ссылка с сайта http://zlib.net. Обертку библиотеки для Delphi взял http://www.base2ti.com/?id=delphi.zlib. Эту ссылку я тоже нашел на сайте ZLib. получился такой вот код:
З.Ы.: Есть такая утилита WinHEX, там в меню Edit -> Convert есть вариант конвертации "zlib inflate". Отрезаем у файла первые 4 байта, потом делаем конвертацию и получаем такой же результат как и у ZLib'а З.З.Ы.: К сожалению, у меня не хватает постов для плюсования тех, кто помогал |
| Автор: boostcoder 19.3.2012, 16:57 | ||
маладца что решение выложил!
успеешь) |