2011-09-29 119 views
4

我正在使用C#.NET 4編寫的Windows服務中的DllImport加載用Delphi 7編寫的.dll文件。在部署此服務之前,我只想確保不需要執行任何特殊操作來處理非託管.dll文件。如果/當DllImport被多次調用時會發生什麼?

我的C#代碼看起來是這樣的:

[DllImport("MyDelphiDLL.dll")] 
private static extern string DoSomething(string value); 

private void SomeMethod(List<string> values) 
{ 
    foreach (string value in values) 
    { 
     string newValue = DoSomething(value); 
    } 
} 

DoSomething函數將被調用多次,並且我嫌疑是MyDelphiDLL.dll只被載入既可以當管理.dll文件被加載,或首先參考DoSomething,但我不確定。

我已經看過MSDN上的DllImportAttribute Class文檔,但它並沒有真正說明某種方式。我也搜索過,並且以我能想到的方式搜索這個問題,但仍然沒有找到明確的答案。

我只是想確保我正確地做到這一點。

+1

它只會被加載一次,發生在第一次調用函數時。 –

+0

@HansPassant有哪些說法呢? –

回答

4

沒有問題,你在做什麼。 DLL將被加載一次並保持加載狀態。

+0

簡短,甜美並且重要。謝謝。 –

4

我認爲你的dll會被加載一次。 DllImport只是編譯器以特殊方式爲DoSomething方法生成代碼的代碼,而不是將方法體編譯爲IL。

另外在深層底層,它似乎調用LoadLibrary WinAPI方法只加載一次DLL。我不確定在一個進程的邊界內多次加載dll是否可行。

+0

爲意圖+1。 –

相關問題