我使用extern(C ++)将函数从d导出到c ++。 d代码在最高级别上有一个try catch语句。只要d代码抛出异常,程序就会中止。我在调用堆栈上有c ++对象,并在d中调用该函数。然后是d try catch语句,然后是d异常抛出。 d代码:
extern (C++) void ThrowEx() {
try {
throw new Exception("hello");
} catch (Exception ex) {
}
}
c ++代码:
extern "C" int rt_init();
void ThrowEx();
void func() {
rt_init();
ThrowEx();
}
当我将ThrowEx更改为不抛出异常时,一切都按预期工作。执行d代码并且不会发生错误。
当程序崩溃时,会生成以下输出:
dwarfeh(224) fatal error
uncaught exception