动态加载.NET DLL包装C++DLL
Dynamically Loading A .NET DLL Wrapping A C++ DLL
我有一个.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,你的问题可能会得到解决。
相关文章:
- 如何包装第三方DLL在R中使用
- 用于LabView中使用的本机c++的c++/cli dll包装器
- c++\CLI dll包装器,用于调用c++类中的虚拟成员
- 无法使用c++/cli包装从c#dll加载函数
- 如何使用指针作为参数在 C# 中包装C++ DLL?
- C++ DLL 包装器 vb.net 传递字节数组的字节数组?
- 设置包装器以使用C 中的C#.dll
- C++/CLI 包装器不能使用来自本机C++ dll 的矢量
- 用多个C#.dll包装多个C++.dll
- 使用C /CLI包装器DLL时缺少功能
- 包装DLL-了解导入失败的原因
- 编译 TCL-DLL 包装器时出现的问题
- 在 C++ 中使用 C# COM 包装的 DLL 会抛出未注册的类
- 如何从c#中的托管c++dll(使用包装类)获取字符串
- 通过托管C++包装程序从非托管C++dll运行C#函数
- 动态加载.NET DLL包装C++DLL
- 通过包装器 dll 访问 Web 服务中的 X64 静态库
- 使用 VS2010 IDE 生成的 Ruby 的 SWIG 包装器 DLL 崩溃
- 使用 cython 包装 c++ DLL:所有字符串均为空
- 不满意的LinkError 用SWIG包装C++DLL,以允许Java开发人员使用它