DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: cuiqingbo
今日帖子: 25
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/18 20:57:40
标题:
delphi10.2 64位调用函数后 size = 0  32正常 浏览:2021
加入我的收藏
楼主: Embarcadero® RAD Studio 10.2 Version 25.0.31059.3231 
用了
ide fix pack
6.3.0.0
6.3.1
编译补丁


procedure LZOCompressStream(const Source, Dest: TStream);
var
   Size: LongWord;

   Buf, Tmp: Pointer;
   ComprSize: LongWord;
   i:integer;
begin
   Size:= Source.Size;
   GetMem(Buf, Size);
   try
     Source.Seek(0, soFromBeginning);
     Source.Read(Buf^, Size);
     GetMem(Tmp, Size);
     try
       i:=_lzo1x_1_compress(Buf,source.Size,tmp,ComprSize,@Work);//运行完本行后Size=0 
//       OutputDebugString(PWideChar(i.ToString));          
//       Dest.Seek(0, soFromBeginning);
       Dest.Write(ComprSize, SizeOf(LongWord));  //写入第一个 也就是压缩后的大小
       Dest.Write(size, SizeOf(LongWord));          //写入第二个 压缩前的大小
       if( ComprSize > 0) and( Size>0 )then     // 64bug 由这里写 Size = 0 出错后发现
         Dest.WriteBuffer(Tmp^, ComprSize);          //写入流
     finally
       FreeMem(Tmp);
     end;
   finally
     FreeMem(Buf);
   end;
end;
带 视频 运行 文件 详见FTP /x64.7z
ftp://uploads@uploads.2ccc.com/x64.7z
一会用10.3.1试试。。。
此帖子包含附件:keymark_2019218205740.zip 大小:86.0K
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/18 21:22:50
1楼: 10.3.1 依旧清空
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/18 22:01:27
2楼: 解决用 NativeInt 变量
预计是 ComprSize 变量 Size 共用内存了?
ComprSize 也有值啊。。Size不至于=0
用 NativeInt  32 64 会有区别啊。。。得处理下
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 zhangl (二黑) ★☆☆☆☆ -
盒子活跃会员
2019/2/18 22:37:05
3楼: _lzo1x_1_compress(), 这个函数第三个参数类型为size_t, 在x64下是64bit, 

ComprSize: LongWord;   LongWord类型恐怕不行吧
----------------------------------------------
报到
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/2/18 22:57:02
4楼: 要支持64位,一般都应该用NativeInt,或与其兼容的类型.
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/19 11:49:27
5楼: 谢谢楼上的各位
 
查看定义。
#    if (LZO_OS_WIN64)
     typedef unsigned __int64   lzo_uint;
     typedef __int64          lzo_int;
     typedef lzo_ullong_t       lzo_uint;//
     typedef lzo_llong_t        lzo_int;//
     typedef unsigned int       lzo_uint;
     typedef int          lzo_int;
     typedef unsigned long      lzo_uint;
     typedef long          lzo_int;
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/19 12:42:30
6楼:      typedef unsigned __int64   lzo_1;
     typedef __int64          lzo_2;
/*     typedef lzo_ullong_t       lzo_3;
       typedef lzo_llong_t        lzo_4;*/
     typedef unsigned int       lzo_5;
     typedef int          lzo_6;
     typedef unsigned long      lzo_7;
     typedef long          lzo_8;
   
    typedef struct {
        lzo_1 lzo_11[1]; 

    } _context1; 
      typedef struct {

        lzo_2 lzo_12[1]; 

    } _context2; 
      typedef struct {

        lzo_5 lzo_15[1];

    } _context5; 
      typedef struct {

    lzo_6 lzo_16[1];

    } _context6; 
      typedef struct {

    lzo_7 lzo_17[1];

    } _context7; 
      typedef struct {
    lzo_8 lzo_18[1];
    } _context8; 


sizeof(_context1):8
sizeof(_context2):8
sizeof(_context5):4
sizeof(_context6):4
sizeof(_context7):4
sizeof(_context8):4

还不清楚
     typedef unsigned __int64   lzo_1;
     typedef __int64          lzo_2;
这两个定义有啥区别
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/19 13:30:50
7楼:     lzo_1 dbFileSize = 18446744073709551615u;
    lzo_2 fileSize = -9223372036854775808;
搞明白了!
sprintf
fileSize = -9223372036854775808 bytes    dbFileSize  = 18446744073709551615 bytes

32位 由于编译出问题 未能测试
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/19 22:05:52
8楼: ubuntu64
sizeof(_context1):8 改long long
sizeof(_context2):8 改long long
sizeof(_context5):4
sizeof(_context6):4
sizeof(_context7):8
sizeof(_context8):8
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/23 17:24:38
9楼: 准备
官方 lzo-2.10.tar.gz
http://bbs.2ccc.com/topic.asp?topicid=276561 二楼附件
Ubuntu 需要安装autoconf  编译
    autoconf  
    ./configure
    make
    make check
    make test     (run a full test)
    sudo make install  (管理员才可以操作系统目录)
(安装完毕会有一堆目录 接下来用得到  用来找文件)
回到 ide工程  在linux  右键 Edit sdk
add $(SDKROOT)/usr/local/include 选Include path
add $(SDKROOT)/usr/local/lib 选library path
右边 点保存图标
点 update local File Cache
点保存回到项目
点编译 届时 会报错
具体操作
ld -llzo2 --verbose
attempt to open //usr/lib/x86_64-linux-gnu/libfakeroot/libc.so failed
//usr/local/lib/x86_64-linux-gnu/liblzo2.a  failed
若干链接 都是找不到
其实文件在
/lib/x86_64-linux-gnu/liblzo2.so.2.0.0
对没错后面有 2.0.0 这个是编译用不到的 怎么处理呢?
生硬点 用linux硬链接与软链接 方法 你复制一份也行?
软链接(符号链接) ln -s   source  target 
硬链接 (实体链接)ln       source  target
ln -s   /lib/x86_64-linux-gnu/liblzo2.so.2.0.0 对应ld -llzo2 --verbose
  命令任意一个failed路径  /liblzo2.so   没错是so  非so.2.0.0
ln -s   /usr/local/lib/liblzo2.a  对应ld -llzo2 --verbose
命令 任意一个liblzo2.a failed路径 /liblzo2.a

接下来直接编译没啥问题了 
还有问题  处理好 本地 liblzo2.so.2.0.0 文件名 只认liblzo2.so 啊
。传上去

ubuntu运行 。压缩  win64 解压
MD5 一致 。。ok linux 调用第三方LIB结束
觉得看不懂我的可以看
https://blog.grijjy.com/2017/04/06/importing-third-party-linux-libraries-on-delphi-10-2-tokyo/
附上一个 改好的可以直接测试的
请不要用于生产除非你了解 lzo 和我改的接口 对不对?
此帖子包含附件:keymark_2019223172438.zip 大小:1,714B
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/23 17:25:27
10楼: 吐槽下 
linux 编译 不让用这个{$L 'ubuntugcc64.o'}
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/2/23 22:44:36
11楼: $L 在linux下的用法
此帖子包含附件:keymark_2019223224436.zip 大小:1,762B
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/3/13 20:56:06
12楼: 编译了一份
arm-linux-androideabi-gcc
版本的  32  64 .o 改天测试下。。嘿嘿

arm-linux-androideabi-gcc -m32 -s -Wall -O2 -fomit-frame-pointer -c minilzo.c -o gcc32.o
arm-linux-androideabi-gcc -m64 -s -Wall -O2 -fomit-frame-pointer -c minilzo.c -o gcc64.o
clang80: warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]

export PATH=/home/用户名/ndk/arm-linux-androideabi/bin/:$PATH
此帖子包含附件:keymark_201931320566.zip 大小:9.8K
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行117.1875毫秒 RSS