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

Я загружаю .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 Class наMSDN, но на самом деле это не так или иначе.Я также искал SO, и гуглил вопрос всеми возможными способами, но до сих пор не нашел однозначного ответа.

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

Ответы [ 2 ]

4 голосов
/ 29 сентября 2011

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

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

4 голосов
/ 29 сентября 2011

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

...