【问题标题】:Delphi XE5 : SymGetSymFromAddrw errorDelphi XE5:SymGetSymFromAddrw 错误
【发布时间】:2014-07-16 06:38:02
【问题描述】:

我正在将组件从 delphi 5 转换为 delphi xe5`。 我完全构建它但仍在安装 以下错误来了

过程入口点 SymGetSymFromAddrW 不能位于 动态链接库IMAGEHLP.DLL

【问题讨论】:

  • 正如我在 Delphi 5 中研究的那样,Imagehlp.pas 的结构不同,现在在 Delphi XE5 中的结构不同。
  • Delphi 5 : 函数 SymGetSymFromAddr;外部 ImagehlpLib 名称 'SymGetSymFromAddr';
  • 德尔福 XE5 :function SymGetSymFromAddr;外部 ImagehlpLib 名称 'SymGetSymFromAddrW';
  • 帮我找方向
  • 您的问题标题和文本显示 XE5,但您的标签显示 XE2。您应该使用实际适用于您的问题的标签。

标签: delphi delphi-xe5 loadlibrary


【解决方案1】:

SymGetSymFromAddrW 在现代 Windows 版本上已被 SymGetSymFromAddr64 取代。您需要改用它。它的定义与 SymGetSymFromAddr 非常相似 - 只需自己重新定义,然后使用您的版本即可:

function SymGetSymFromAddr64(hProcess: THandle; dwAddr: DWord64;
  pdwDisplacement: PDWord64; var Symbol: TImagehlpSymbol): Bool; stdcall;

function SymGetSymFromAddr64;    external ImagehlpLib name 'SymGetSymFromAddr64W';

请参阅documentation for SymGetSymFromAddr64 了解更多信息。

【讨论】:

  • 在这种情况下,我必须更改 winapi.imagehlp pas 文件,该文件是 Delphi IDE 的一部分。或定制它并使用它。让我们看看
  • 不,你没有。只需将它放在你自己的代码单元中,并在你使用它的地方访问它,而不是当前调用SymGetSymFromAddr
  • 嗨,我使用了一种逻辑,但不是很好的做法。而不是从delphi xe5引用imagehlp作为winapi.imagehlp,我使用了delphi 5 imageehlp中的旧图像并安装了该组件。但仍然是为什么我们必须做这个 Delphi xe5 定义的 imagehlp 文件的问题。它应该自动完成。以防与窗口 dll 通信。欢迎任何建议。阿布舍克梅斯特里
  • Windows (Microsoft) 更改了 ImageHlp,正如我链接的文档所解释的那样。与微软交谈。 :-) Windows API 太大了,不能指望 Delphi 对所有东西都有包装,或者不能跟上每一个变化。如果您需要该函数,但没有正确声明,请重新声明它并继续。使用 Delphi 5 的版本也是一个坏主意;使用正确的并更改您的代码。您不再使用 Windows 2000 或 95。
  • 不,这是错误的解决方案。请参阅我的第一条评论(关于将其放入您自己的单位)。您应该永远更改 Delphi 附带的源代码;这样做意味着更新将无法正确应用,因为文件不匹配。如果您坚持要更改,请制作一个副本,将其放在您自己项目的文件夹中,然后更改该副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多