Что произойдет, если / когда DllImport вызывается несколько раз?

#c# #.net #interop #dllimport

#c# #.net #взаимодействие #dllimport

Вопрос:

Я загружаю .dll, написанная на Delphi 7 с использованием DllImport в службе Windows, написанной на C # .NET 4. Перед развертыванием этой службы я просто хочу убедиться, что мне не нужно делать ничего особенного для обработки неуправляемой 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, но я не совсем уверен.

Я просмотрел документацию класса DllImportAttribute в MSDN, но на самом деле в ней не указано ни то, ни другое. Я также искал SO и искал вопрос всеми возможными способами, которые я могу придумать, и до сих пор не нашел окончательного ответа.

Я просто хочу убедиться, что я делаю это правильно.

Комментарии:

1. Он загружается только один раз, происходит при первом вызове функции.

2. @HansPassant есть какая-нибудь ссылка, в которой это сказано?

Ответ №1:

С тем, что вы делаете, проблем нет. DLL будет загружена один раз и останется загруженной.

Ответ №2:

Я думаю, что ваша dll-библиотека будет загружена один раз. DllImport предназначен только для компилятора для генерации кода для метода doSomething специальным образом вместо компиляции тела метода в IL.

Также в глубокой основе кажется, что вызывается метод LoadLibrary WinAPI, который загружает dll только один раз. Я не уверен, что возможно загружать dll несколько раз в рамках одного процесса.