如果/多次调用DllImport会发生什么?

时间:2011-09-29 18:13:01

标签: c# .net interop dllimport

我在用C#.NET 4编写的Windows服务中使用DllImport加载一个用Delphi 7编写的.dll。在部署这个服务之前,我只想确保我不需要做任何特别的处理unmanaged .dll。

我的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文档,但它并没有真正说明这种或那种方式。我也搜索过SO,并用我能想到的每一种方式搜索问题,但仍然没有找到明确的答案。

我只是想确保我正确地解决这个问题。

2 个答案:

答案 0 :(得分:4)

你正在做什么没有问题。 DLL将被加载一次并保持加载状态。

答案 1 :(得分:4)

我认为你的dll会被加载一次。 DllImport只是编译器以特殊方式为DoSomething方法生成代码而不是将方法体编译为IL的点。

同样在深层底层,似乎调用LoadLibrary WinAPI方法只加载一次dll。我不确定在一个进程的边界内多次加载dll是可能的。