You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3 32位转64位时Tag属性存对象引用的方案咨询

Delphi 32位转64位:Tag属性存储对象指针的方案选择

方案分析

方案2:修改指针转换方式

利用Delphi内置的NativeInt类型(32位下等价于Integer,64位下等价于Int64)替代原有Integer强制转换逻辑:

  • 存储对象指针:MenuItem.Tag := NativeInt(AField);
  • 读取对象指针:AField := TcxDBPivotGridField(NativeInt(MenuItem.Tag));

该方案适配Delphi 11.3中Tag属性的位宽特性:32位平台下Tag为4字节整数,64位平台下为8字节整数,而NativeInt会自动匹配当前平台位宽,完美兼容Win32/Win64。

  • 优点:改动量极小,仅需替换转换类型,无需调整原有代码结构,适配大量使用Tag的场景,无多线程环境下无额外风险。
  • 缺点:仍存在Tag属性混用(整数与指针并存)的隐患,后续维护需注意区分不同用途的Tag赋值。

方案1:新增私有结构存储关联

在TDialoogDynRapport中添加私有字典(如TDictionary<TMenuItem, TcxDBPivotGridField>),专门存储控件与对象的关联关系,替代Tag的指针存储功能。

  • 优点:类型安全,彻底避免Tag属性的混用问题,代码可读性更强,后续维护逻辑更清晰。
  • 缺点:改动成本高,需替换所有原有用Tag存指针的代码逻辑,还要额外管理字典的生命周期(如窗体销毁时释放字典、处理控件销毁时的键值移除)。

推荐方案

如果现有代码中用Tag存储对象指针的场景较多,优先选择方案2——它以极低的改动成本实现了32/64位兼容,完全匹配你的需求场景。若追求极致类型安全且代码改动范围可控,再考虑方案1。


内容的提问来源于stack exchange,提问作者Jan Doggen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:47:11