动态加载.NET DLL包装C ++ DLL

时间:2015-03-18 11:53:20

标签: c# c++ .net dll

我有一个包装C ++ DLL的.NET库:

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”位于同一目录中。

1 个答案:

答案 0 :(得分:0)

如果你的" Unmanaged.dll"也依赖于另一个dll,你仍然会得到同样的例外。这有点误导,但如果您要添加依赖于工作目录的DLL,您的问题可能会得到解决。