.net - 如何重新加载经常崩溃的第 3 方 DLL

标签 .net c++ winapi dll

我正在使用用非托管 C++ 编写的第 3 方 DLL,它控制我们拥有的一些硬件。

不幸的是,这个 DLL 有时会崩溃,我的任务是让它自动“重新加载”。我不太确定如何继续才能获得最佳结果。

我的项目使用 C++.Net 2.0 (2005)。我将第 3 方的东西包装在一个单独的 DLL 中。我一直在尝试 FreeLibrary() 和 LoadLibrary()。但是,当我使用 FreeLibrary() 时,一些内部 DLL 依赖项仍处于分配状态,而 LoadLibrary() 将使其因内存损坏而崩溃。

建议的另一种方法是使用 .NET 远程接口(interface)重构整个项目。杀死另一个进程并重新启动它会更容易,但这将需要大量工作。

有什么建议吗?指针?提示?

最佳答案

最有效的方法是根本不在您的应用程序进程中加载​​该 DLL。相反,创建第二个进程,其唯一工作是代表您的应用程序使用该 DLL。您可以使用共享内存区域、本地套接字或其他 IPC 机制来控制代理进程。

这样,当有问题的 DLL 崩溃时,您可以简单地让代理进程终止,而不必担心(几乎不可能的)尝试确保 DLL 在其崩溃过程中没有破坏任何重要的任务。您的主进程只需要启动一个新的代理进程实例并继续。

关于.net - 如何重新加载经常崩溃的第 3 方 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357898/

相关文章:

c++ - 如何在win32按钮上显示颜色与背景色相同的透明png图像文件

c++ - 我究竟做错了什么?程序崩溃。 [GDI+, WINAPI, C++]

c# - 在 WPF 中将 Canvas 绑定(bind)到 Canvas

c# - 程序集错误building app - Encountered multiple versions of assembly

c++ - 如何在 C++ 中将多维数组传递给没有内部维度的函数?

c++ - 使用 std::swap 禁用 ADL

c++ - 从 std::ofstream 获取句柄

c# - Linq To SQL 和审核更改的字段

c# - EF的内存消耗

c++ - 代码有效但在析构函数中崩溃(没有复制构造函数)