c# - 通过P/Invoke防止应用程序调用库发生graceless crash

标签 c# c++

我有一个 C# 应用程序 App A,它通过 P/Invoke 调用 C++ (Qt) DLL App B。假设我无法以任何方式编辑 App B,但我知道 App B 正在抛出一个 Out of Memory Exception under a set在将输入从 App A 传递到 App B 之前,我可以复制但不能准确测试的条件。此异常不会对 App A 造成任何威胁,如果 App B 可以某种方式“重置”,则可以忽略此异常,但当 App B 调用 abort() 导致 App A 运行时终止。

如何防止 App B 不可避免的、不可预测的、通常是普通的崩溃影响 App A

注释:

  • 抛出此错误时将忽略已实现的 UnhandledExceptionHandler
  • App B 由于 QtWebkit 中的一个错误而崩溃,App B 可以通过删除超大对象并返回 null 来轻松处理该错误。
  • App A 不会报告内存不足,并且机器有足够的内存来多次执行 App B 的操作,无论错误如何,但无论出于何种原因,此内存显然未分配给 App B

最佳答案

您创建一个 shim 进程,其唯一目的是加载 App B 并使用一些 IPC 机制与 App A 通信。App A 生成 shim,如果 shim 崩溃,则 App A 采取适当的操作(重新生成,传达错误给用户等)。

关于c# - 通过P/Invoke防止应用程序调用库发生graceless crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736821/

相关文章:

c# - 图片框上的清晰图像

c++ - Namespace::* 和传统的 * 有什么区别吗?

c++ - 如何更改新 MFC 对话框的默认语言(地区)?

c++ - Boost 绑定(bind)和 'result_type' : is not a member, c++03 友好

c++ - 使用 WCF 和 gSOAP 向服务器和客户端添加证书

c# - 如何使用 msTSProfilePath、msTSHomeDirectory 等扩展 C# DirectoryServices UserContext

c# - 是否可以在 Web api 路由中使用 .json?

c# - 有效地将项目添加到列表<类>中并行 C#

c++ - 如何正确实现 `operator/` ?

c# - 枚举标志负值