DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 3
在线用户: 22
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/20 16:57:39
标题:
 Ehlib10.1的控件memTableEh,在Delphi 11.2的64位环境运行,新增或编辑字段值时出错!!! 浏览:1307
加入我的收藏
楼主:   Ehlib10.1的控件memTableEh,在Delphi 11.2的64位环境运行,新增或编辑字段值时出错,
D11.1下64位是正常的,如何解决? (D11.2的32位环境下运行是正常的)

 with memTableEh1 do
  begin
    Append;
    FieldByName('name').AsInteger :='user88'; <<----运行时这里出错
    FieldByName('ID').Value :=123;
  end;
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/20 16:59:37
1楼: 更正如下:
  Ehlib10.1的控件memTableEh,在Delphi 11.2的64位环境运行,新增或编辑字段值时出错,
D11.1下64位是正常的,如何解决? (D11.2的32位环境下运行是正常的)

 with memTableEh1 do
  begin
    Append;
    FieldByName('name').Value :='user88'; <<----运行时这里出错
    FieldByName('ID').Value :=123;
  end;
--------
----------------------------------------------
-
作者:
男 czlixu (czlixu) ★☆☆☆☆ -
普通会员
2022/9/20 20:17:20
2楼: 是Delphi 11.2的问题,还是EhLib VCL 10.1 Build 10.1.031的问题?
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/20 21:54:59
3楼: 应该是Delphi 11.2在64位环境下编译的问题,不知如何解决。
 在32位环境下编译是正常的,在D11.1版本的64位编译也是正常的.
升级到11.2的64位就不行了。
----------------------------------------------
-
作者:
男 12288144 (12288144) ★☆☆☆☆ -
普通会员
2022/9/20 22:35:59
4楼: FieldByName('name').AsInteger :='user88'; <<----运行时这里出错
 AsInteger :='user88'  ???  user88?
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/21 8:41:07
5楼: to 4楼:上面已作更正如下
   
 with memTableEh1 do
  begin
    Append;
    FieldByName('name').Value :='user88'; <<----运行时这里出错
    FieldByName('ID').Value :=123;
  end;

==========
象下面这样写,运行时也是出错的:
 with memTableEh1 do
  begin
    Append;
    FieldByName('ID').Value :=123;   <<----运行时这里出错
    FieldByName('name').Value :='user88';
  end;
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/9/21 10:02:26
6楼: 不用ehlib的memTable,用Firedac的MemoryTable,有没有问题?感觉最近版本ehlib质量在下降。
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/21 10:29:01
7楼: 用Firedac的MemoryTable是没问题的,只是老程序用了ehlib的memTable,替换起来麻烦,
 它有些特殊的功能,而FDmemtable却没有
----------------------------------------------
-
作者:
男 limin (limin) ★☆☆☆☆ -
盒子活跃会员
2022/9/24 9:57:51
8楼: ehlib一些新功能测试不够全面
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/9/30 12:01:40
9楼: 应该是Delphi 11.2在64位环境下有些规则改变了
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/10/9 8:56:11
10楼: 原因找到了,参考大神lsuper对AlphaControls控件也出错的回复:
==========
   初步看,AlphaControls 对 x64 支持的不严谨,如指针这种 Integer <-> Pointer 错误的写法:
PRGBQuad(Integer(srcLine) + Pixel)^
应该改为
PRGBQuad(NativeInt(srcLine) + Pixel)^
还有其他如:
Message.Result := Integer(FDataLink);  对象转 Integer 在 x64 会丢失内容,等等

至于为啥老版本没啥问题,猜测和 Delphi 11.x 更加新进 & 现代化有关,如支持 ASLR:

https://blog.marcocantu.com/blog/rad111_pe_security.html
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/10/9 8:59:01
11楼:   经测,关闭连接器 ASLR 两个选项,Ehlib10.1的控件memTableEh 不报错了
 
  

按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 kunsoft (kunsoft) ▲△△△△ -
普通会员
2022/10/9 9:11:25
12楼: 要彻底解决问题,还是要等Ehlib新版完美支持64位后,再升级。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行64.45313毫秒 RSS