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

Delphi 11.3 Alexandria 64位下Cromis.DirectoryWatch访问违规问题

Cromis.DirectoryWatch在Delphi 11.3 64位下重命名文件夹触发Access Violation的修复

问题描述

  • 该单元在Delphi 10 Seattle 32/64位、Delphi 11.3 32位环境下正常运行
  • Delphi 11.3 64位环境中捕获文件夹重命名操作时触发Access Violation
  • 错误发生在第253行代码:
    PWord(Cardinal(NotifyRecord.AMsg) + NotifyData^.FileNameLength)^ := 0;
    
  • 错误提示:

    Access violation at address 0000000000F6E5C8 in module 'ABCD64BIT.exe'. Write of address 00000000B0D61FDA

问题原因

代码中使用Cardinal类型转换指针NotifyRecord.AMsg,但Cardinal是32位无符号整数类型。在64位Delphi环境中,指针是64位宽度,强制转换为Cardinal会截断地址的高32位,导致计算后的内存地址无效,写入操作时触发访问违规。

修复方案

将代码中的Cardinal替换为NativeUInt类型(该类型在32位环境下为32位,64位环境下为64位,自动适配平台),修改后的代码如下:

PWord(NativeUInt(NotifyRecord.AMsg) + NotifyData^.FileNameLength)^ := 0;

验证

修改后重新编译64位程序,测试文件夹重命名操作,Access Violation问题应可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:52:10