2011-09-29 116 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。 –

相关问题