2015-03-18 2 views
0

У меня есть библиотека .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».

+0

Используйте событие post-build для xcopy DLL в том же каталоге, что и ваш .exe, поэтому Windows всегда может его найти. Обратите внимание, что вероятной точкой входа является «_foo» или «? Foo @@ YAXXZ». –

+0

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

+0

Тогда вам, вероятно, не хватает другой DLL, на которую «Unmanaged.dll» имеет зависимость. Как и ЭЛТ. Используйте монитор процессов SysInternals, чтобы увидеть, как ваша программа пытается его найти и не работает. –

ответ

0

Если ваш «Unmanaged.dll» также зависит от другой DLL, вы все равно получите то же исключение. Это вводит в заблуждение, однако, если вы добавите библиотеки DLL, зависящие от рабочего каталога, ваша проблема может быть решена.

Смежные вопросы