求会delphi的大佬,解释一下以下每行代码的意思,最好能转成易语言代码

查看 59|回复 1
作者:勇哥哥520   
  • procedure DecodeBookContentsdat(f:tmemorystream;var contentslist:tstrings);
  • var outBuffer: Pointer; outSize: Integer;
  •   pstart:pdword; fsize:integer;
  • begin
  •     fsize:=f.Size-$28 ;
  •     pstart:=pdword(integer(f.Memory)+$28 );
  •     Decompressbuf(pstart, fSize ,0,outBuffer,outSize);
  •     f.Size := outSize;
  •     copymemory(f.Memory ,outbuffer,outsize);
  •     freemem(outbuffer);
  •     f.position:=0;
  •     contentslist.LoadFromStream(f);
  • end;

    大佬, 代码

  • luojineng   

    就是一个zlib解压操作:
    [Asm] 纯文本查看 复制代码文件读写模式常量:
    定义 常量 读取方式 = 0
    定义 常量 写入方式 = 2
    变量 声明 内存
    变量 声明 文件句柄
    调用 DLL函数 "kernel32.dll" 中的函数 GetFileSize, "msvcrt.dll" 中的函数 malloc 和 free
    函数 GetFileSize(句柄, 高位字节指针, 低位字节指针)
    函数 malloc(内存大小)
    函数 free(内存指针)
    文件句柄 = 打开文件("BookContents.dat", 读取方式)
    如果 文件句柄 = 0 则
        弹窗提示("无法打开文件")
        结束程序
    结束如果
    内存大小 = 取文件长度(文件句柄)
    内存 = malloc(内存大小)
    读文件(文件句柄, 内存, 内存大小)
    关闭文件(文件句柄)
    变量 偏移地址 = 0x28
    变量 pstart = 取子字节集(内存, 偏移地址, 内存大小 - 偏移地址)
    变量 out_buffer
    变量 压缩数据长度
    变量 解压缩数据长度 = 内存大小 * 10
    调用 DLL函数 "msvcrt.dll" 中的函数 c_zlib_uncompress
    函数 c_zlib_uncompress(目标指针, 解压缩数据长度指针, 源指针, 压缩数据长度)
    变量 缓冲区 = malloc(解压缩数据长度)
    调用 DLL函数 "msvcrt.dll" 中的函数 memset
    函数 memset(缓冲区, 0, 解压缩数据长度)
    调用 DLL函数 "msvcrt.dll" 中的函数 c_zlib_uncompress(缓冲区, 解压缩数据长度指针, pstart, 压缩数据长度)
    out_buffer = 取字节集内容(缓冲区)
    释放内存(缓冲区)
    释放内存(内存)
    打印文本(out_buffer)
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部