在运行时加载 C++ DLL

Posted

技术标签:

【中文标题】在运行时加载 C++ DLL【英文标题】:Load a C++ DLL at runtime 【发布时间】:2018-08-12 17:02:14 【问题描述】:

我正在使用 DllImport 加载 C++ dll。用户通过将string 传递给MyClass 构造函数来使用我的代码

我想加载 MyClass 构造函数中提供的指定 DLL 路径,然后我希望方法能够访问加载的 DLL。

我该如何编码,以便用户输入的所有内容都是new MyClass().DoSomething()

【问题讨论】:

您希望 .dll 中的方法被 MyClass 以外的函数访问? MyClass 只是 .dll 代码的占位符吗? Pinvoke 不提供对象模型。没问题,用C#写一个MyClass类,写一个DoSomething()方法。 it 可以进行必要的 pinvoke 调用。请注意,Pinvoke 不支持 C++ 类,仅支持 C 函数和静态 C++ 成员函数。 【参考方案1】:

您需要 Win32 中的 LoadLibraryGetProcAddress 方法,然后是 Marshal.GetDelegateForFunctionPointer 方法。有关详细说明,请参阅此 msdn 博客:

https://blogs.msdn.microsoft.com/jonathanswift/2006/10/03/dynamically-calling-an-unmanaged-dll-from-net-c/

【讨论】:

以上是关于在运行时加载 C++ DLL的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 窗体无法在 Windows10 上加载非托管 C++ DLL

.NET Core 应用程序无法加载 C++ DLL

在程序运行时更改 DLL

编译c ++,Visual Studio时加载DLL不起作用

在运行时加载第 3 方 DLL 失败并出现未处理异常(Log4CXX、ActiveMQ)

返回String类型时Visual Basic WPF加载ATL C++ dll程序退出