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

Dynamically Loading A .NET DLL Wrapping A C++ 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" 在同一目录中。

如果您的 "Unmanaged.dll" 还依赖于另一个 dll,您仍然会遇到相同的异常。这有点误导,但是如果您添加依赖于工作目录的 DLL,您的问题可能会得到解决。