Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5307
dartveider13
А здесь подразумевается замена UTF8String на что-то другое?

Нет, сжатые данные нужно представить в форме исключающей появление нулевых байтов. Например, base64 ;)
24 ноя 21, 12:25    [22400134]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Kazantsev Alexey, т е после сжатия еще раз закодировать строку в base64?
24 ноя 21, 12:44    [22400143]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Kazantsev Alexey, а вариант с подправить исходник очень сложнее?
24 ноя 21, 12:47    [22400145]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5307
dartveider13
т е после сжатия еще раз закодировать строку в base64?

Да. И если будет выбран этот вариант, то стоит сделать полную ревизию формата. Например, отказаться от кодирования строки в base64 перед сжатием. Отказаться от сжатия UnicodeString и сжимать байты.

dartveider13
а вариант с подправить исходник очень сложнее?

Это определённо сложнее изменения формата данных.
24 ноя 21, 13:10    [22400156]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Kazantsev Alexey, мда... Тут придется переделывать вторую часть, которая на винде на делфях... Но байты я вроде уже сжимал пробовал. Там создается два потока: поток с base64 и поток сжатия. И все это добро потом в ШК запихивается.
Да уж с либой aztecgen было проще. Жаль что я ее под линукс не соберу, а длл-ки под линуксом не работают
24 ноя 21, 13:22    [22400161]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 987
dartveider13
Fr0sT-Brutal, исходник этой либы написан как я понимаю на плюсах, я в них не очень. Тут как я понимаю надо попробовать собрать его в линуксе? Что получится фиг знает. С инета я взял его и скомпиленой длл-кой

Тогда да. Хотя всегда остается Wine
24 ноя 21, 13:45    [22400176]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Fr0sT-Brutal, любопытно, любопытно. Это ж что получается. Я могу попробовать через wine запустить уже работающую программу windows?
Как же мало я еще знаю о линуксах)))

Сообщение было отредактировано: 24 ноя 21, 14:11
24 ноя 21, 14:08    [22400193]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5307
dartveider13,

Немного покопался в LazBarCodes и оказалось, что ноль во входных данных считается ошибкой.
24 ноя 21, 16:28    [22400277]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5307
Покопался ещё немного, и оказалось, что автор zint (порт которой используется в LazBarCodes) признал, что это не правильно и исправил ошибку. Я пофиксил lbc_aztec.pas, можно пользоваться.

К сообщению приложен файл (lbc_aztec.zip - 59Kb) cкачать
24 ноя 21, 16:44    [22400287]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 987
dartveider13
Fr0sT-Brutal, любопытно, любопытно. Это ж что получается. Я могу попробовать через wine запустить уже работающую программу windows?
Как же мало я еще знаю о линуксах)))

Да, я запускал свои: гуй+файлы+сетевые операции+БД FB - заводилось
24 ноя 21, 19:11    [22400378]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Kazantsev Alexey, Ваууу спасибо. Я обязательно попробую. Вам прям тыща спасибо так отвлечься на чужой вопрос
25 ноя 21, 05:52    [22400463]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Fr0sT-Brutal, этот вариант я тоже обязательно попробую. Интересно посмотреть. Так то моя програ на винде, которая сейчас у пользователей стоит не сложнее блокнота
25 ноя 21, 05:54    [22400464]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 769
Ну что ж. Под wine моя программа взлетела на ура. Будем использовать этот вариант пока что, но все таки я думаю допилю версию на лазаре. Отдельное спасибо Алексею за посильную помощь с разборками lazbarcodes
25 ноя 21, 08:23    [22400485]     Ответить | Цитировать Сообщить модератору
 Re: Как подружить zlib от Deplhi с Lazarus  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 6645
dartveider13,

zlib под linux в виде so-ки спокойной ставится\качается
ZLib.pp в стандартной поставке fpc

описалка

вот пример постепенной распаковки

+
      a:=eRead(inBuf,Length(inBuf));
      if a<=0 then begin
        Result:=a;
        exit;
      end;
      InBufSize:=a;
      Result:=DecodeTo(buf,ASize);

function TMCPFingro.DecodeTo(var Buf; ASize: integer): integer;
var
  status:integer;
begin
    //* We are now decompressing from inbuf to outbuf */

    FZRec.next_in := @InBuf;

    FZRec.next_out := @Buf;
    FZRec.avail_in := InBufSize;
    FZRec.avail_out:= ASize;

    status := inflate(FZRec, Z_PARTIAL_FLUSH);

    if (status = Z_OK) or (status = Z_STREAM_END) then begin
        //* Successful decompression */
        InBufSize:=FZRec.avail_in;
        if InBufSize>0 then begin
          move(FZRec.next_in^,InBuf,InBufSize);
        end;
        Result := PtrInt(FZRec.next_out) - PtrInt(@Buf);

        if (status = Z_STREAM_END) then begin
            //* Turn off compression too */
            DoneDecoder;
            DecodeMode:=false;
        end;
    end else

    if (status = Z_BUF_ERROR) then begin
        //* Full buffers? Maybe we need more output space.. */
        Result:=0;
    end else begin
        Result:=0;
    end;
end;

procedure TMCPFingro.DoneDecoder;
begin
  if CanTranslate then begin
    inflateEnd(FZRec);
    CanTranslate:=false;
  end;
end;

procedure TMCPFingro.InitDecoder;
begin
  if CanTranslate then exit;
  {$IFNDEF FPC}
  FZRec.zalloc := zcalloc;
  FZRec.zfree := zcfree;
  {$ENDIF}
  CanTranslate:=inflateInit_(FZRec, zlib_version, sizeof(FZRec))>=0;
  
end;


Сообщение было отредактировано: 25 ноя 21, 09:45
25 ноя 21, 09:43    [22400505]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить