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

如何在Delphi中将作为参数传递的Proc引用赋值给记录字段?

解决Delphi中匿名方法引用赋值导致的GPF错误

问题根源

你遇到的GPF错误,核心原因是给TMyRec记录添加了packed关键字。TMyProc是Delphi的匿名方法类型(属于引用类型),这类类型的内部实现依赖特定的内存对齐规则,而packed会强制记录按1字节边界紧密排列,破坏了匿名方法引用所需的内存对齐要求,最终导致赋值时触发非法内存访问。

修复方案

直接去掉TMyRec定义中的packed关键字即可:

type
  TMyProc = reference to procedure ( i_ : integer );

  PMyRec = ^TMyRec;
  TMyRec = record // 移除packed修饰
    i : integer;
    proc : TMyProc;
  end;

额外说明

  • Delphi的引用类型(包括匿名方法、接口、字符串、动态数组等)本质是指针包装类型,要求内存地址按指针大小对齐(32位程序为4字节,64位程序为8字节)。packed会覆盖默认的对齐规则,导致这类字段的内存布局异常。
  • 你的示例代码中分配内存后立即释放,实际业务场景中如果需要保留TMyRec实例,注意不要提前调用FreeMem,否则后续无法访问记录内的proc字段。

内容的提问来源于stack exchange,提问作者SOLID Developper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:25:49