我 有 一 个 非常 旧 的 ( 来自 CentaurixInteractive 的 Photoshop SDK for Delphi ) 组件 集 。 我们 可以 重新 编译 它 , 并 成功 地 在 我们 的 应用 程序 中 使用 它 , 没有 任何 问题 。 但 当 我们 升级 到 Delphi 11 时 , 它 开始 创建 访问 冲突 。
如果 我 将 内存 分配 行 从 new(Stub)
更改 为 Stub:= VirtualAlloc(nil, SizeOf(TStub), MEM_COMMIT, PAGE_EXECUTE_READWRITE)
一 开始 它 能 工作 , 但 在 进一步 的 操作 中 它 会 产生 几 个 " 内存 问题 " ...
这个 问题 的 原因 是 什么 ? 是否 有 任何 编译 器 指令 或 解决 方法 来 解决 这个 问题 ?
更新 : 它 是 一 个 windows 32 位 应用 程序 , 可以 与 delphi 10 . 3 一起 工作 , 所以 它 支持 unicode 。
1条答案
按热度按时间3zwtqj6y1#
我找到了这个问题的原因。它不是直接创建内存分配,而是关于为dll创建一个存根函数。 Delphi 11中引入了几个PE安全标志。你可以在Marco Cantu的blog中找到详细信息。其中一个,DEP flag,显然阻止了一些内存操作。如果我取消选中它,应用程序工作得很好。