【问题标题】:Due to Shared memory, when MS Visual C 6.0 DLL crashes it also causes VB 6 EXE to crash由于共享内存,当 MS Visual C 6.0 DLL 崩溃时,它也会导致 VB 6 EXE 崩溃
【发布时间】:2010-03-03 15:20:24
【问题描述】:

我有一个问题,由于共享内存,当 MS Visual C 6.0 DLL 崩溃时,它也会导致 VB 6 EXE 崩溃。 我们的主程序 EXE 是用 VB 6 编写的。它为各种文件类型调用插件(DLL),这些是用 MS Visual C 6.0 编写的。当“C”插件 (DLL) 遇到问题时,它有时会崩溃,这会导致 EXE 程序也崩溃,因为它们共享相同的地址空间。 因此,我正在寻找一种方法来防止 MS Visual C 6.0 DLL 在 DLL 崩溃时导致 VB 6 EXE 也崩溃。

【问题讨论】:

  • DLL 与可执行文件在同一个进程空间中运行——对于操作系统来说,它们是同一个“程序”的一部分。
  • C 函数是如何导出的?...这将有助于我们包含代码来解释更多...。我们盲目地看它,看不到什么/在哪里/为什么/如何。 ..

标签: c memory dll vb6 exe


【解决方案1】:

这与 DLL 与 EXE 无关。这是一个崩溃的线程。如果您没有捕获异常,那么它将调用 Windows 中的默认异常处理程序。这将终止进程,并可选择将问题告知 Microsoft。

在 VB6 中无法捕获和处理 AccessViolation 等异常。无论如何,这不值得麻烦,您的主执行线程已经心脏病发作并且无法以有意义的方式继续。即使您能抓住它,该程序仍处于非常糟糕的状态,其全局状态已部分突变。试图继续只会造成更多的崩溃。或者更糟糕的是,生成无效结果并破坏有价值的数据。

一种选择是在单独的进程中运行 DLL。崩溃将终止该过程,而不是您的。做到这一点非常困难,很难检测到崩溃。而且进程互操作很棘手。

【讨论】:

  • 进程互操作是微不足道的。创建一个 ActiveX EXE。否则,很好的答案
  • 如何不这样做的好例子。 AV 不会使 exe 崩溃,它会被捕获并返回 RPC_E_SERVER_FAULT 错误代码。绝对没有任何迹象表明出了什么问题,并且服务器处于非常危险的执行状态。 Vista 的 IGlobalOptions 带来了一些缓解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2012-02-01
  • 2014-11-22
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多