2013-05-12 55 views
-5

我在DLL中做了一些功能,如:出口相同的DLL功能在多个名称

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

然后我出口它下2名:

export 
    DoThis, 
    DoThis name 'DoThat'; 

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

所以,问题是:

这是“重命名”不是一个法律做的事情吗?

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

+1

你所描述的事情没有发生,除非你证明它。不要粘贴假代码。粘贴一个真正的程序,一个完整的程序。假代码是浪费每个人的时间。 – 2013-05-12 12:25:08

+0

我不能在这里粘贴超过200 kB的代码。我不是在寻找解决问题的办法,而只是回答这两个问题。 – Tom 2013-05-12 13:30:17

+0

你发布的是代码的缩减代码。你只需要20-30行。做出这种削减repro的行为会让你相信问题在别处 – 2013-05-12 13:34:53

回答

3

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

这是“重命名”不是合法的事情吗?

在多个名称下导出相同的函数是完全合法的。你描述的问题不会发生。

我可以使用FastMM4调试DLL而不将 更改为控制台应用程序吗?

当然可以。在“运行参数”对话框中指定主机应用程序,您可以调试您的DLL。

+0

谢谢你的答案。第二个不适用于我 - 没有出现内存泄漏的通常FastMM对话框。但因为我知道这绝对是可能的,我会进一步挖掘。谢谢,这些信息都是我需要的! – Tom 2013-05-12 13:32:39

+1

FastMM泄漏报告显示在DLL中 – 2013-05-12 13:33:26