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;

  • 相关阅读:
    maven常用插件
    Java反编译工具:Java Decompiler
    好看的电影
    我说
    Fisher准则一维聚类
    Java获取函数参数名称
    推荐几个字体生成网站
    Python中的两种路径
    轻量级数据库简介
    Solr Wiki文档
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940596.html
Copyright © 2011-2022 走看看