zoukankan      html  css  js  c++  java
  • 压缩和解压缩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;

  • 相关阅读:
    ZooKeeper Java例子(六)
    css盒模型
    竖直方向三栏布局
    水平方向三栏布局
    js判断一个字符串是以某个字符串开头
    js防止重复点击
    升级 AngularJS 至 Angular
    js实现大文件分片上传的方法
    使用svn进行本地代码管理
    angular使用代理解决跨域
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940596.html
Copyright © 2011-2022 走看看