2013-05-12 50 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