【问题标题】:Exporting same DLL function under multiple names [closed]以多个名称导出相同的 DLL 函数 [关闭]
【发布时间】:2013-05-12 11:18:58
【问题描述】:

我在我的 DLL 中创建了一些函数,如下所示:

procedure DoThis(A: PChar): Boolean; stdcall;
begin
f := TFileStreamCreate(A, fmCreate);
f.read()
f.free;
end;

然后我以 2 个名称导出它:

export
  DoThis,
  DoThis name 'DoThat';

在大多数情况下,这种“重命名”是有效的。但至少在一种情况下,重命名的函数“DoThat”不会从真实文件中读取数据,而是从 void 中读取数据。如果我在同一个文件上调用 DoThis - 它效果很好。 借助 FastMM4,我消除了所有内存泄漏(将代码转换为常规控制台应用程序)

所以问题是:

这种“重命名”不合法吗?

如果它是合法的 - 我可以使用 FastMM4 调试 DLL 而不将其更改为控制台应用程序吗?

【问题讨论】:

  • 除非您证明,否则您所描述的不会发生。不要粘贴假代码。粘贴一个真实的程序,一个完整的程序。假代码是在浪费大家的时间。
  • 我不能在这里粘贴超过 200 kB 的代码。我不是在寻找问题的解决方案,而只是寻找 2 个问题的答案。
  • 您发布的是代码的缩减复制。您只需要 20-30 行。进行缩减复制的行为会让你相信问题出在其他地方

标签: delphi winapi dll delphi-7 fastmm


【解决方案1】:

您在问题中所描述的与现实不符。

这种“重命名”不合法吗?

以多个名称导出相同的函数是完全合法的。你描述的问题没有发生。

我可以在不更改的情况下使用 FastMM4 调试 DLL 将其放入控制台应用程序中?

是的,你可以。在运行参数对话框中指定一个宿主应用程序,您就可以调试您的 DLL。

【讨论】:

  • 感谢您的回答。第二个对我不起作用——通常的带有内存泄漏的 FastMM 对话框不会出现。但既然我知道这绝对是可能的,我会进一步挖掘。谢谢,这些信息就是我所需要的!
  • FastMM 泄漏报告显示在 DLL 中
猜你喜欢
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
相关资源
最近更新 更多