首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C/C++/Obj-C

在 c++中可以 catch 到外部的 dll 引发的异常吗?

  •  
  •   v2byy · 6 天前 · 401 次点击

    举例:

    编写一个 c lib,定义一个 export function:

    int devide_by_zero()
    {
    	int a=1;
        int b=0;
        return a/b;
    }
    

    另起一个 client 工程,调用这个 c lib,使用 try catch,无法 catch 到这个异常。

    有什么方法可以在 c++中 catch 到这个异常呢,保持 client 端程序不 crash ?

    4 回复  |  直到 2018-07-12 22:59:33 +08:00
        1
    geelaw   6 天前
    首先 1/0 不会引发 C++ exception,其次,一般来说跨 native assembly boundary 做异常处理是很坏的想法,因为不同 C++ 编译器的异常对象可以是不兼容的(无法 recognise each other )。

    要在 Visual C++ 中处理例子中的异常,你可以使用 SEH,见 https://docs.microsoft.com/en-us/cpp/cpp/structured-exception-handling-c-cpp

    最佳实践:native assembly 接口用错误代码指示错误,必须处理所有可能处理的情况;跨 native assembly 的未处理异常指示程序应该崩溃。
        2
    zynlp   6 天前 via iPhone
    试试 seh exception
        3
    v2byy   6 天前
    @geelaw 多谢,c lib 是会有异常的,c++下没有
        4
    gnaggnoyil   6 天前   ♥ 1
    补充一下 1L,不仅不同编译器之间的(C++)异常模型是可以不兼容的,甚至同一个编译器使用不同选项编译出来的(C++)异常模型也是可以不兼容的……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   648 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 15ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1