当多次调用 DllImport 时会发生什么?

4

我正在使用C# .NET 4编写的Windows服务中的DllImport加载一个用Delphi 7编写的.dll文件。在部署此服务之前,我只想确保我不需要做任何特殊处理来处理非托管的.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 类文档,但它并没有明确说明。我还在 Stack Overflow 上进行了搜索,并谷歌了所有我能想到的问题,但仍然没有找到明确的答案。
我只是想确保我的做法是正确的。

1
它只会被加载一次,发生在第一次调用函数时。 - Hans Passant
@HansPassant 有任何相关的参考资料吗? - Louis Rhys
2个回答

4

您所做的没有问题。DLL将被加载一次,并保持加载状态。


4

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

此外,在深层次的底层中,似乎调用LoadLibrary WinAPI方法仅加载一次dll。我不确定在一个进程范围内多次加载dll是否可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接