【问题标题】:Letting DLL crash instead of application让 DLL 而不是应用程序崩溃
【发布时间】:2017-10-13 13:10:49
【问题描述】:

我正在开发一个应用程序使用的多个 DLL。此应用程序和 DLL 的功能是模块化的,它们中的每一个都可以独立工作(即:仅应用程序、应用程序 + DDL_1、应用程序 + DLL_1 + DLL_2 等)。

现在,每当 DLL 崩溃(即:NULL 指针、堆栈溢出等)时,整个应用程序都会崩溃。有没有办法只让发生异常的DLL崩溃?我正在管理 DLL,但不是应用程序。

更新

我知道 DLL 本身不会崩溃,因为它只是加载到应用程序中的代码。我想知道的是,是否有办法在运行时排除该 DLL 的特定功能,如果其中出现问题。

【问题讨论】:

  • 你不能 afaik.. 一个 dll 被加载到当前应用程序的虚拟内存中。如果 dll 崩溃,应用程序也会崩溃。
  • Dll 只是一个带代码的文件,它不会崩溃。执行 dll 代码的进程会崩溃。
  • 您的问题表明对多任务操作系统的运行方式缺乏了解,我认为这是真正的问题。我建议你先了解多任务操作系统中的进程,进程和线程之间的区别,以及什么是地址空间分离,然后再做其他任何事情。你确实需要理论基础。
  • @VTT :这听起来像是一个完整的答案。 (有一个次要警告,一个人可能能够安排一个线程崩溃。)

标签: c++ windows dll


【解决方案1】:

您必须将 DLL 作为子进程调用,而不是动态链接它。这需要一个单独的包装应用程序,能够为您的父进程提供某种形式的 IPC。

链接到您的主应用程序的 DLL 将导致堆栈指针和基指针转移到运行时加载到内存中的 DLL 的地址空间。这意味着如果它在 DLL 中崩溃,主应用程序本身也会崩溃。 DLL 本身并不是什么“崩溃”。它是使用存储在 DLL 中的函数运行的主应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2017-02-08
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多