在运行时加载 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
中的 LoadLibrary
和 GetProcAddress
方法,然后是 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
编译c ++,Visual Studio时加载DLL不起作用