【问题标题】:What happens if a C++ shared lib throws an exeption in a C project [duplicate]如果 C++ 共享库在 C 项目中引发异常会发生什么 [重复]
【发布时间】:2014-03-03 08:44:30
【问题描述】:

我正在使用 C API 编写一个共享库,但大多数代码都是用 C++ 编写的。 在某些地方我想抛出异常,但我不知道如果第三方开发人员想用纯 C 编写项目会发生什么。

当 C++ 共享库在纯 C 项目中引发异常时会发生什么?

【问题讨论】:

标签: c++ c exception shared-libraries


【解决方案1】:

不是一个好主意。你肯定会泄漏内存。

一个明智的选择是在你的 C++ 库中拥有一个捕获站点,它填充一个线程特定的错误信息对象,并重构每个接口函数以具有一个返回状态代码来表示已经生成了一个错误。 (参见 Microsoft 的组件对象模型 HRESULT 和 IErrorInfo)。然后,您提供函数来调用您的库以提取错误详细信息。

【讨论】:

    【解决方案2】:

    如果 C++ 异常冒泡到 C 代码中,那么您将得到未定义的行为。这是因为每种语言中的堆栈框架对于彼此来说都是陌生的。 C++ 运行时将尝试将堆栈帧展开到 C 代码中,并假定堆栈帧和运行时是为 C++ 设置的,而实际上它是为 C 设置的。

    如果幸运的话,您的应用会崩溃,您很快就会知道问题所在。如果你运气不好,它会持续一段时间,你会得到一些很难找到的错误!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多