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

Dynamically Loading A .NET DLL Wrapping A C++ DLL

本文关键字:包装 C++DLL DLL NET 加载 动态      更新时间:2023-10-16

我有一个.NET库,它封装了一个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"在同一目录中。

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