У меня есть библиотека .NET, который оборачивает на C++ DLL:Динамически Загрузка .NET DLL Обертывание C++ DLL
public class Wrapper
{
public void CallFoo()
{
Foo();
}
[DllImport("Unmanaged.dll"), EntryPoint = "foo", CallingConvention = CallingConvention.Cdecl)]
private static extern void Foo();
}
Я могу вызвать метод, если я добавить DLL оболочки для проекта .NET , Однако, если я попытаюсь вызвать метод динамически, как показано ниже, я получил DLLNotFoundException (который говорит мне, что «Unmanaged.dll» не удалось найти).
Assembly assembly = Assembly.LoadFrom(@"C:\Wrapper.dll");
Type type = assembly.GetTypes()[0];
dynamic wrapper = Activator.CreateInstance(type);
wrapper.CallFoo();
В Visual Studio «Unmanaged.dll» не отображается как загруженный в разделе «Модули». Поэтому я предполагаю, что я должен найти способ загрузить «Unmanaged.dll».
Я открыт для любого предложения.
Редактировать: «Unmanaged.dll» находится в том же каталоге, что и «Wrapper.dll».
Используйте событие post-build для xcopy DLL в том же каталоге, что и ваш .exe, поэтому Windows всегда может его найти. Обратите внимание, что вероятной точкой входа является «_foo» или «? Foo @@ YAXXZ». –
Я уверен, что точка входа верна. Также я забыл упомянуть, что unmanaged.dll находится в том же каталоге. – alicanerdogan
Тогда вам, вероятно, не хватает другой DLL, на которую «Unmanaged.dll» имеет зависимость. Как и ЭЛТ. Используйте монитор процессов SysInternals, чтобы увидеть, как ваша программа пытается его найти и не работает. –