#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 несколько раз в рамках одного процесса.