我在用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,并用我能想到的每一种方式搜索问题,但仍然没有找到明确的答案。
我只是想确保我正确地解决这个问题。
答案 0 :(得分:4)
你正在做什么没有问题。 DLL将被加载一次并保持加载状态。
答案 1 :(得分:4)
我认为你的dll会被加载一次。 DllImport只是编译器以特殊方式为DoSomething方法生成代码而不是将方法体编译为IL的点。
同样在深层底层,似乎调用LoadLibrary WinAPI方法只加载一次dll。我不确定在一个进程的边界内多次加载dll是可能的。