Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.136.159] |
|
Сообщ.
#1
,
|
|
|
Помогите завершить перенос с C на Pascal.
Вот исходники и модуль на TMT Pascal: QuickLZ v.1.5.0 (QuickLZ.com) (я использовал QLZ_COMPRESSION_LEVEL = 1) Прикреплённый файлquicklz_pas.zip (3,04 Кбайт, скачиваний: 194) Прикреплённый файлquicklz.zip (20,23 Кбайт, скачиваний: 199) |
Сообщ.
#2
,
|
|
|
У кого-нибудь есть идеи, как исправить модуль, чтоб он правильно работал, а то автор quicklz не хочет помочь в переносе на pascal компилятор
|
Сообщ.
#3
,
|
|
|
Значит, смотри... У меня TMT нет (я использую FPC) и ставить себе я его не буду. Так что все то, что последует ниже - это только из просмотра исходников.
1) конструкции типа type pointer_ptr = ^pointer; qlz_state_compress_ptr = ^qlz_state_compress; qlz_state_decompress_ptr = ^qlz_state_decompress; procedure update_hash_upto (var state : qlz_state_decompress; var lh : pointer; max : pointer); 2) Не все так гладко, как хотелось бы в qlz_compress_core. Ты (по ошибке, видимо) перевел не тот кусок, который нужен: #ifdef X86X64 // надо вот этот #else // а у тебя - вот этот #endif 3) я бы вместо подобных конструкций ui32 ( dst^ ) := ... делал бы так: pui32 (dst)^ := ..., а может быть - вообще бы избавился от src:Pointer и dst:Pointer, а сделал бы их бестиповыми параметрами (просто var src, dst), но это уже надо смотреть дальше, что там в остальных функциях творится 4) полностью откомпилировать и проверить твой проект не могу, потому как в qlz_compress_core у тебя используется ptr, на что мне FPC справедливо выдает ошибку о несоответствии числа параметров. |
Сообщ.
#4
,
|
|
|
Есть ещё непонятные для меня конструкции в конце функции qlz_compress
*destination |= (QLZ_COMPRESSION_LEVEL << 2); *destination |= (1 << 6); *destination |= ((QLZ_STREAMING_BUFFER == 0 ? 0 : (QLZ_STREAMING_BUFFER == 100000 ? 1 : (QLZ_STREAMING_BUFFER == 1000000 ? 2 : 3))) << 4); Непонятно, destination присваивается unsigned char или что-то другое |