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

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

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

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

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

最佳答案

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

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

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

10-15 07:19
查看更多