• 压缩和解压缩OLEVARIANT


    uses ZLibEx

    procedure VariantToStream(const V: OLEVariant; Stream: TStream);
    var
      P : Pointer;
    begin
      Stream.Position := 0;
      Stream.Size := VarArrayHighBound (V, 1) - VarArrayLowBound (V, 1) + 1;
      P := VarArrayLock (V);
      Stream.Write (P^, Stream.Size);
      VarArrayUnlock (V);
      Stream.Position := 0;
    end;

    procedure StreamToVariant(Stream: TStream; var V: OLEVariant);
    var
      P : Pointer;
    begin
      V := VarArrayCreate ([0, Stream.Size - 1], varByte);
      P := VarArrayLock (V);
      Stream.Position := 0;
      Stream.Read (P^, Stream.Size);
      VarArrayUnlock (V);
    end;

    function CompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      M := TMemoryStream.Create;
      M0 := TMemoryStream.Create;
      try
        if V = Null then exit;

        VariantToStream(V,M);       //转换到流
        M.Position := 0;
        ZCompressStream(M, M0);        //压缩流
        StreamToVariant(M0, V);      //转换到变体返回值
      finally
        M.Free;
        M0.Free
      end;
      Result := V;
    end;

    function DeCompressData(V: OleVariant): OleVariant;
    var
      M, M0: TMemoryStream;
    begin
      M := TMemoryStream.Create;
      M0 := TMemoryStream.Create;
      try
        if V = Null then exit;

        VariantToStream(V,M);       //转换到流
        M.Position := 0;
        ZDeCompressStream(M, M0);        //压缩流
        StreamToVariant(M0, V);      //转换到变体返回值
      finally
        M.Free;
        M0.Free
      end;
      Result := V;
    end;

  • 相关阅读:
    JavaScript日期加减
    javascript乘除算法解决浮点精度
    npm的chalk包的使用
    npm模块copy-to-clipboard复制内容到剪切板
    BeeFramework 系列一 安装篇(Arc)
    CocoaPods详解之----使用篇
    ObjectiveC 深浅拷贝学习
    unity项目针对IOS及Android平台的音频压缩格式
    通过IP地址定位准确的地理位置
    Unity 通过代码简单实现文理的灰化显示
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940596.html
Copyright © 2020-2023  润新知