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;

  • 相关阅读:
    ubuntu18【合上盖子不休眠】
    linux和windows双系统开机显示 Minimal BASHlike line editingis supported xxxxxx
    Linux下opera不支持h5播放器的解决方法
    linux openjdk路径
    Linux安装redis tar.gz
    dpkg 安装deb文件
    Linux破解Navicat15
    kali设置grub主题
    kali安装git tar.gz
    kali 安装 teamviewer 显示检测到wayland
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940596.html
Copyright © 2011-2022 走看看